Search

POAS In The Real World Passing Profit, Composing Conversion Value, And Bidding With Confidence

POAS in the real world passing profit to Google Ads: what to send as conversion value, which costs to include, how to keep margins private and test it.

By , Founder
Published 14 min read

Most teams now agree that ROAS alone is not enough. The question that keeps coming back is more practical:

How do we actually send profit to Google Ads, include real costs, and run POAS experiments without handing Google our margin table?

This guide walks through exactly that, from picking a profit definition to wiring it into conversion value and testing it safely.

Key Takeaways

1. From ROAS To POAS The Implementation Gap

ROAS uses revenue as conversion value; POAS replaces revenue with profit before ad spend:

  • ROAS = revenue ÷ ad spend
  • POAS = contribution profit ÷ ad spend

In Product Metrics’ framework, contribution profit means revenue excluding VAT/sales tax minus cost of goods and variable order costs (shipping subsidies, payment fees, packaging, expected returns). (Source: Product Metrics – POAS vs ROAS)

That definition is what makes a POAS of 1.0 break-even: ad‑driven sales have covered product and variable costs and the ads that drove them. (Source: Product Metrics – POAS vs ROAS)

Diagram comparing ROAS and POAS on one €100 order with €30 contribution profit and €20 ad spend: ROAS 5, POAS 1.5, above break-even POAS 1.0. Illustrative data.
On the same €100 order, ROAS reads 5 while POAS reads 1.5: €10 of contribution profit is left after €20 of ads.

Conceptually, POAS is straightforward. In practice, most accounts still:

Fixing this requires two things:

  1. A clear, per‑order profit formula.
  2. A plan to compose that profit into Google’s single value field without leaking sensitive margin data.

The rest of this guide is about those two pieces.

2. Decide What “Profit” You Want Google To See

Before touching tags or bid strategies, standardise how you’ll calculate profit at order level. That choice matters more than any code snippet.

2.1 Fix Your Revenue Basis

Google’s own examples assume conversion value is usually net revenue, not including VAT or sales tax. (Source: Google Ads Help – About conversion values)
For US retailers, that normally means:

  • Start from item subtotal (price after discounts).
  • Exclude sales tax and any non-refundable duties from the value you send.

This keeps POAS consistent with how finance sees revenue.

2.2 Choose A Profit Definition You Can Maintain

Think in layers. A typical ecommerce stack looks like this per order:

  • Item revenue (net of discounts)
  • − Cost of goods sold (product cost)
  • − Variable order costs (shipping subsidies, payment fees, packaging, expected returns)
  • = Contribution profit before ads
  • − Ad spend
  • − Overheads and fixed costs
  • = Net profit

Google’s gross profit metrics from conversions with cart data and cost_of_goods_sold stop at revenue − COGS. They don’t automatically subtract your shipping subsidies, payment fees or returns unless you fold those into COGS yourself. (Source: Google Ads Help – Metrics with conversions with cart data, Merchant Center Help – cost_of_goods_sold)

Waterfall of one €100 order: minus €50 COGS gives €50 gross profit, minus €20 variable order costs gives €30 contribution profit before ads, then ad spend and overheads leave €4 net profit. Illustrative data.
Google’s gross profit stops at revenue minus COGS (€50); the number worth bidding on is contribution profit before ads (€30).

For POAS bidding, most retailers use one of three definitions:

  1. Minimum viable profit: revenue − COGS.
  2. Contribution profit (recommended): revenue − COGS − variable order costs.
  3. Contribution profit including expected returns: same as (2), but with a return allowance per SKU.
Table of three profit definitions for POAS bidding on a €100 order: minimum viable profit €50, contribution profit €34 (recommended), contribution profit including expected returns €30. Illustrative data.
The same €100 order sends €50, €34 or €30 as conversion value, depending on the definition you choose.

Pick one that:

  • You can compute per order and per SKU from your ecommerce platform.
  • You can keep consistent across websites, currencies and channels.

This is the profit number we’ll send to Google Ads as conversion value.

3. How Google Ads Treats Conversion Value

Google Ads defines conversion value as the numeric amount you record for each conversion, which can represent revenue, profit margin or other business value. (Source: Google Ads Help – About conversion values)

A few consequences for POAS:

So “bidding on profit” in Google Ads is not a special feature. It’s standard Target ROAS or Maximize conversion value, pointed at a profit‑based value column.

4. Route 1 - Send Profit Instead Of Revenue As Conversion Value

This route answers the queries:

  • “How to send profit instead of revenue as conversion value to Google Ads?”
  • “How to pass gross profit per order to Google Ads?”
  • “How to bid on profit in Google Ads without showing Google my margins?”

At a high level:

  1. Compute order‑level profit in your backend.
  2. Pass that profit to your Google Ads conversion as the value field.
  3. Point a Target ROAS or Maximize conversion value strategy at that conversion.

4.1 Compute Profit Per Order

On your ecommerce platform, for each order:

net_revenue = sum(line_item_price_excl_tax_after_discounts)
product_cogs = sum(line_item_cogs)
variable_costs = shipping_subsidy + payment_fees + packaging + expected_returns

profit_before_ads = net_revenue - product_cogs - variable_costs

This is the number you’ll send to Google Ads.

If you cannot yet calculate all variable costs per order, start with revenue − COGS and mark this as an interim definition while you expand cost coverage.

4.2 Map Profit To The value Parameter (Browser-Side)

If you use the Google tag directly, Google’s documentation shows how to dynamically pass a transaction‑specific value and currency via the value and currency parameters: (Source: Google Ads Help – Track transaction-specific conversion values)

<script>
  gtag('event', 'conversion', {
    'send_to': 'AW-XXXXXXXXX/YYYYYYYYYY',
    'transaction_id': 'ORDER_ID_123',
    'value': PROFIT_BEFORE_ADS,    // e.g. 42.15
    'currency': 'USD'
  });
</script>

In a Google Tag Manager Google Ads Conversion Tracking tag, you’d set Conversion Value to a variable that holds profit_before_ads. (Source: Google Ads Help – Use the Google tag for conversion tracking, Google Ads Help – Track transaction-specific conversion values)

From Google’s perspective, this is identical to sending revenue. It simply sees a number.

4.3 Server-Side And Offline Profit Uploads

If you don’t want profit visible in the page source at all, compute it server-side and send conversions via:

Google’s own value‑based bidding playbooks describe passing profit as conversion value via offline import or API for Search and Shopping. (Source: Think with Google – Maximise Growth with Data, Think with Google – Making a Bid for Profit)

When everything runs server-side, neither Google nor anyone inspecting your checkout page sees raw COGS or per‑SKU margins.

Diagram of two routes for the profit value: browser-side via the Google tag puts the value in the page source; server-side or offline import keeps COGS, fees and margins in the backend.
Google Ads receives the same profit value either way; only the server-side route keeps costs and margins out of the browser.

4.4 Adjust Target ROAS To Match Profit Values

Once profit flows into Google Ads as conversion value:

A simple way to set the new targets is to work backwards from your contribution margin and desired profit after ads, as in Product Metrics’ target ROAS guide. (Source: Product Metrics – How to set a target ROAS from your margin)

Comparison of one order with revenue versus profit as conversion value: €100 and ROAS 5 with break-even target ROAS 333%, against €30 and POAS 1.5 with break-even target ROAS 100%. Illustrative data.
After the switch, break-even target ROAS drops from 333% to 100%; keeping the old target asks Google for a POAS of 3.33.

5. Route 2 - Use Conversions With Cart Data And COGS For Gross Profit

If your main question is “How to include cost of goods sold in Google Ads conversion value?”, you can also use Google’s native retail stack.

Conversions with cart data let you send item‑level cart contents with your purchase conversions (product IDs, quantities, prices). When you also provide cost_of_goods_sold in your Merchant Center feed, Google can calculate and report revenue, gross profit, gross profit margin and units sold per product. (Source: Google Ads Help – About conversions with cart data, Google Ads Help – Metrics with conversions with cart data, Merchant Center Help – cost_of_goods_sold)

At a high level:

  1. Add cost_of_goods_sold for each product to your Merchant Center feed.
  2. Implement conversions with cart data on your purchase event (via Google tag or GTM).
  3. Link Merchant Center and Google Ads; enable conversions with cart data for the relevant conversions. (Source: Google Ads Help – About conversions with cart data)

Once configured, Shopping and Performance Max reports can show metrics such as Gross profit and Gross profit margin per product or product group. (Source: Google Ads API – Retail reporting)

Limitations for POAS:

For many retailers, cart data + COGS is an excellent reporting layer, but they still move to Route 1 or a server‑side setup when they want bidding to fully reflect contribution profit.

Table comparing Route 1, profit as conversion value, with Route 2, conversions with cart data plus cost_of_goods_sold, on what Google receives, costs covered, bidding and best use.
Cart data with cost_of_goods_sold adds gross profit reporting; only the value you send in the tag changes what Smart Bidding optimises for.

6. Don’t Forget Refunds Cancellations And Adjustments

If Google Ads never hears about returns, your POAS is inflated and Smart Bidding is rewarded for customers who send goods back.

Google Ads supports conversion adjustments that either:

You identify the original conversion (for example via order_id or gclid + timestamp), then upload an adjustment with the new kept value. (Source: Google Ads API – Upload conversion adjustments, Google Data Manager API – Conversion adjustments)

A robust POAS setup usually:

  1. Sends initial profit as conversion value when the order is placed.
  2. On each refund or item return, sends a RESTATE adjustment with the updated profit (which may be zero or negative).
  3. Automates this via an integration between the order system and Google Ads, on a daily or intra‑day schedule.
Diagram of two orders each sending €30 profit: order A restated to €12 after a return, order B retracted after a full refund; POAS falls from 3.0 to 0.6 on €20 of ad spend. Illustrative data.
Without adjustments these two orders report a POAS of 3.0; on the profit actually kept, it is 0.6.

Google’s own value‑based bidding material explicitly recommends using conversion adjustments to reflect returns and profit in value-based setups. (Source: Think with Google – Maximise Growth with Data)

7. How To Keep Margins Confidential While Bidding On Profit

There are three complementary levers that let you run profit‑based bidding without exposing sensitive margins.

7.1 Keep All Cost Data Server-Side

When you compute profit from:

  • Ecommerce platform data (prices, discounts, tax, COGS, shipping, fees).
  • Order and refund status in your backend.

…and only send the final profit value to Google Ads via a server‑side endpoint or offline import, neither Google nor third parties see your margin table or item-level costs in the browser. (Source: Product Metrics – Full Signal Tracking, Google Ads Help – How Google Ads tracks website conversions)

This is the default approach in server‑side tracking products that “send profit to Google Ads and Meta,” including Product Metrics’ Full Signal Tracking. (Source: Product Metrics – Full Signal Tracking)

7.2 Use Indexed Or Scaled Values Instead Of Currency

Google’s guidance on changing biddable conversion actions mentions “indexed values” on a different scale: you can store conversion value as an index rather than real currency amounts, as long as Target ROAS is recalibrated. (Source: Google – Changing Biddable Conversion Actions)

In practice, that can mean:

  • Storing profit index = profit_before_ads ÷ X, where X is a constant known only to your team.
  • Or multiplying profit by a constant so that £12.34 of profit might appear as a value like 123.4 in Google Ads.

Because Target ROAS and Maximize conversion value care about relative differences and total value, not absolute currency, constant scaling preserves optimisation behaviour; you simply set a Target ROAS that matches the new scale. (Source: Google Ads Help – About conversion values, Think with Google – Maximise Growth with Data)

Table of profit values scaled by a constant of 10: £12.34 becomes 123.4, £24.68 becomes 246.8, the 2 to 1 ratio holds and break-even target ROAS moves from 100% to 1,000%. Illustrative data.
Multiplying every profit value by 10 keeps the ratios between orders; only the target ROAS moves, from 100% to 1,000%.

If you use Google’s conversion value rules, you can also apply multiplicative factors on top of recorded values for specific audiences or conditions, which underscores that the bidding system is comfortable with scaled values. (Source: Google Ads API – Conversion value rules, WordStream – How to Use Conversion Value Rules)

7.3 Limit Who Sees Profit In Your Reporting Stack

Even when profit values live in Google Ads, you can:

  • Restrict account access to users who need to see value columns.
  • Use custom columns that show POAS and profit after ads without revealing item‑level COGS. (Source: Google Ads Help – Custom columns)

Combined with server‑side computation and scaling, this lets you run full POAS optimisation while keeping underlying margins confidential.

8. How To Include COGS Shipping And Fees In Google Ads Conversion Value

A common edge question is whether shipping costs and payment fees should be included when you set up profit‑based conversion values.

A practical rule of thumb:

  • Include any cost that varies meaningfully by order or SKU and that you want Smart Bidding to internalise.
  • Exclude fixed overheads (salaries, rent) and handle them outside Google Ads in your required POAS target.

For most retailers that means:

  • COGS: always include. Either directly per SKU in your own database or via Merchant Center cost_of_goods_sold. (Source: Merchant Center Help – cost_of_goods_sold)
  • Shipping: include any shipping subsidy you pay (for example, free shipping or flat‑rate shipping that doesn’t fully cover your carrier cost).
  • Payment fees: include card/PayPal/BNPL fees per order.
  • Returns: include an expected return cost per category or product, or adjust via conversion adjustments when actual returns happen. (Source: Google Ads Help – About conversion adjustments)
Checklist of costs for a profit-based conversion value: include COGS, shipping subsidy, payment fees and returns; leave salaries and rent out and cover them with the POAS target.
Costs that vary by order or SKU go into the value; fixed overheads stay out and are covered by the POAS target.

Technically, there are two main ways to get these costs into value:

  1. Directly in your profit formula, before you send value.
  2. By folding some items into COGS so that Google’s gross profit metrics consider them as part of product cost. (Source: Merchant Center Help – cost_of_goods_sold, Google Ads Help – Metrics with conversions with cart data)

Either way, the goal is the same: the value Google sees should reflect the profit you are actually willing to trade for ad spend.

9. Running A Safe POAS Experiment In Google Ads

You don’t have to flip an entire account to POAS in one step. Google strongly recommends phasing value-based bidding in, normally over several weeks, to let models learn from new value signals. (Source: Google – Value-based bidding best practice guide)

Here is a practical experiment pattern for ecommerce:

Step 1 - Add A Profit-Based Conversion Action No Bidding Yet

  1. Create a new Purchase – profit conversion action in Google Ads that records profit as value. (Source: Google Ads Help – Set up conversion tracking for your website)
  2. Implement tagging so this action fires on purchases with your chosen profit formula.
  3. Initially set it as secondary (not used for bidding) so you can collect data without disrupting existing strategies. (Source: Google – Changing Biddable Conversion Actions)

Run this for a few weeks until profit data is stable and matches your backend totals within a tolerable margin.

Step 2 - Build POAS Views In Reporting

Using Google Ads custom columns, create:

  • POAS = conversion value (profit) ÷ cost for the profit action.
  • Profit after ads = conversion value (profit) − cost.

That gives you an account‑native view of “how to calculate profit inside of Google Ads” without exporting everything to spreadsheets. (Source: Google Ads Help – Custom columns)

Step 3 - Run A Campaign-Level Experiment On Target ROAS

Use Google Ads Experiments to A/B test profit‑based bidding: (Source: Google Ads Help – Set up a custom experiment, Google – Test Campaigns with Ads Experiments)

  1. Pick a Shopping or Performance Max campaign with enough volume.
  2. Create a Custom experiment that duplicates the base campaign.
  3. In the experiment campaign:
  4. Split traffic (for example, 50/50) and run long enough to get statistically useful POAS and revenue readings.
Three-step POAS experiment in Google Ads: add a secondary profit conversion action, build POAS and profit-after-ads custom columns, then run a 50/50 custom experiment on one Shopping or Performance Max campaign.
Collect profit as a secondary action, report POAS in custom columns, then test Target ROAS on profit against current bidding in a 50/50 split.

You’re now testing “how to bid on profit in Google Ads” in a controlled way, with a clear rollback path if needed.

10. Where Product Metrics Fits In

Doing all of the above manually is possible. It is also a lot of engineering and operations work:

  • Joining order data, COGS and variable costs reliably for each SKU.
  • Capturing click IDs first‑party so adblockers don’t break attribution.
  • Maintaining conversion adjustments for refunds and returns.
  • Keeping profit, revenue, new vs returning customers and LTV aligned across Google Ads and Meta.

Product Metrics was built specifically to solve this for Google Shopping and Performance Max. (Source: Product Metrics – About)

With Full Signal Tracking, Product Metrics: (Source: Product Metrics – Full Signal Tracking)

  • Runs a first‑party, auto‑rotating endpoint on your domain that survives adblockers and browser privacy changes.
  • Reads orders, margins and customer history from platforms like Shopify, WooCommerce, Magento, Lightspeed and Shopware.
  • Keeps the Google Click ID server-side and deduplicates orders.
  • Sends five conversion actions to Google Ads from each order: revenue, profit, new customer, returning customer and lifetime value.

That gives you:

  • Clean POAS and ROAS per product, even under heavy adblocking.
  • Profit as a first‑class conversion signal for Shopping and PMax bidding.
  • The ability to run POAS experiments quickly without building and maintaining your own tracking stack.

If you want to go deeper from here, two good next reads are Product Metrics’ guides on POAS vs ROAS and setting Target ROAS from your margin, which show the maths behind the targets you’ll plug into your experiments. (Source: Product Metrics – POAS vs ROAS, Product Metrics – How to set a target ROAS from your margin)

And when you’re ready to see what profit-based bidding looks like on your own catalogue, Product Metrics can analyse your product-level ROAS and POAS and set up server-side profit tracking for you. (Source: Product Metrics – About, Product Metrics – Full Signal Tracking)

Written by

, Founder of Product Metrics

1M+ products analysed · Nominated at the Dutch Search Awards for Best Measurement Campaign (2023) and Best Use of Data (2024)

Linkedin

Keep reading.

See which of your products to push, fix or pause. Start with your own products, or a 30-second estimate.

Check one product first: work out its break-even ROAS in the calculator. Then see where all your products stand.

Find your hidden profit30-second estimate · no login
Analyse your products for freeFree analysis, no credit card

Questions, or want to spar about your products? Book a demo: a video call with Berend, then a demo account.