The question appears constantly in ecommerce communities: “My ROAS is 500% but I’m not actually profitable. What am I missing?”

The answer is almost always the same. ROAS measures revenue relative to ad spend. It says nothing about margin. A product with 70% COGS, 15% in fees and shipping, and a 10% return rate generates almost no profit at 500% ROAS. But Google’s algorithm optimizes toward maximum revenue — which is not the same as maximum profit.

This post covers what ROAS actually measures, what POAS is and why it matters, and how to restructure your tracking so Google’s bidding optimizes for profit rather than revenue.

The Problem With Optimizing for Revenue

ROAS = Revenue / Ad Spend

When you set a Target ROAS in Google Ads, you are telling the algorithm to maximize the amount of revenue it generates per pound or dollar of ad spend. The algorithm is very good at this. It will find the auctions, queries, and users that are most likely to generate a purchase.

The problem: revenue is not profit. The algorithm does not know your margins. It does not know that one product costs $2 to make and sells for $50, while another costs $40 to make and sells for $55. To the bidding algorithm, both are $50 and $55 conversions respectively. It will happily optimize toward high-revenue, low-margin products and ignore high-margin, lower-priced ones.

The cumulative effect at scale: you end up with a campaign that generates impressive ROAS numbers and mediocre or negative actual profitability.

What ROAS Ignores

The costs that exist between revenue and profit that ROAS does not account for:

Cost of goods sold (COGS). The direct cost to produce or acquire the product. A product with 60% COGS means for every $100 in revenue, $60 goes to the product itself before any other costs.

Shipping costs. Outbound shipping (which you may partially or fully absorb), and return shipping if you offer free returns.

Return rate. If 15% of orders are returned and you refund the full purchase price, your effective revenue per order is lower than the conversion value reported in Google Ads. The algorithm counts a $200 order that later gets returned as a $200 conversion — it never knows about the refund.

Payment processing fees. Shopify Payments, Stripe, or other processors typically charge 2-3% of transaction value. On a 500% ROAS, this is a small but real cost.

Platform fees. Shopify subscription, app fees, any revenue-based subscription costs.

Google Ads spend itself. ROAS is a ratio, so ad spend is already in the denominator — but the other costs above are not.

When you stack these up, a product with 60% COGS, 10% shipping and returns, and 3% fees leaves 27% of revenue as gross margin before any other overhead. At 500% ROAS (20% of revenue going to ads), you have 7% left for overhead and profit. At 400% ROAS (25% of revenue), you have 2% left. Below a certain ROAS, the business is unprofitable despite the percentage looking impressive.

What POAS Is

POAS (Profit on Ad Spend) replaces revenue with profit in the calculation:

POAS = Gross Profit / Ad Spend

Where Gross Profit = Revenue - COGS - other variable costs

A 200% POAS means for every $1 spent on ads, you made $2 in profit. This number is directly meaningful — it tells you whether advertising is profitable, not just whether it is generating revenue.

POAS requires knowing your margins. That is the harder part. ROAS is easy to calculate because Google tracks the revenue number automatically. POAS requires feeding your cost data into the system.

Option 1: Adjust Conversion Values to Reflect Margin

The most direct way to get Google bidding toward profit is to replace revenue-based conversion values with margin-based conversion values.

Instead of sending conversion_value = 100 (the order revenue), you send conversion_value = 27 (the estimated gross profit on that order).

Google then optimizes toward maximizing this profit value rather than revenue. When you set a Target ROAS, it is effectively a target POAS because the “revenue” in the equation is now profit.

How to implement this in GTM:

In your purchase confirmation DataLayer push, add a calculated profit value alongside the revenue:

window.dataLayer.push({
  event: 'purchase',
  ecommerce: {
    transaction_id: 'ORDER-123',
    value: 100.00,          // full revenue — keep this for GA4
    currency: 'USD',
    profit_value: 27.00,    // your calculated margin
    items: [...]
  }
});

Create a DataLayer variable in GTM reading ecommerce.profit_value. In your Google Ads Conversion tag, set the Conversion Value field to {{DL - Profit Value}} rather than the standard revenue value.

Google Ads now receives profit as the conversion value. Your Target ROAS target changes meaning — a 300% target ROAS now means 300% return on ad spend relative to profit, which is dramatically more useful than 300% relative to revenue.

The challenge: you need your profit value calculated at the time of checkout. For stores with a simple, consistent margin structure (all products at approximately the same margin), you can apply a flat margin multiplier: profit_value = revenue * 0.27 (for 27% margin). For stores with variable margins across a large catalog, this requires product-level margin data to be part of your checkout calculation.

Product-level margin calculation:

If your store has variable margins, the cleanest approach is to store your cost/margin data in a Google Sheets spreadsheet linked to product IDs, and use a server-side lookup or your CRM to calculate the per-order margin at checkout time and pass it in the DataLayer.

This is more technical. For some stores, a flat blended margin estimate (average across all products) is a reasonable starting approximation — it is more accurate than using full revenue, even if not perfect.

Option 2: Custom Conversion Value Rules

Google Ads has a feature called Conversion Value Rules that allows you to adjust conversion values based on campaign, audience, or device attributes without changing your tracking implementation.

Go to Tools, Measurement, Conversion Value Rules.

You can create rules like:

This is a simpler implementation than changing what your tag fires. The trade-off: conversion value rules are applied at the campaign level and you have less granularity than product-level margin tracking.

For stores that want to move toward POAS optimization quickly without a complex implementation, conversion value rules are the fastest path. Start with a blended margin factor and refine toward product-level accuracy over time.

Option 3: Custom Labels for Margin-Based Bidding

A less direct but widely used approach is to use custom labels in your Merchant Center feed to segment products by margin tier, then set different ROAS targets per segment in your Shopping or PMax campaign.

In your product feed, add a custom_label_0 attribute with values like high_margin, mid_margin, low_margin based on each product’s gross margin.

In Google Ads, create product group splits based on these labels. Set higher ROAS targets for low-margin products (you need more revenue per ad dollar to stay profitable) and lower ROAS targets for high-margin products (you can afford lower revenue efficiency because more of it is profit).

This does not give you true POAS optimization, but it steers the algorithm toward your most profitable products by making low-margin products expensive to serve (high ROAS target restricts delivery) and high-margin products more aggressively bid (lower ROAS target allows more spend).

Accounting for Returns

Returns are the most commonly overlooked cost in ROAS analysis. If 15% of your orders are returned and you process full refunds, your effective revenue per conversion is 85% of what Google reports.

Google Ads has a conversion adjustment feature that allows you to submit return data after the fact. In Tools, Conversions, you can upload a file of transaction IDs with a refund amount for each returned order. Google reduces the conversion value for those transactions and recalculates the campaign’s historical ROAS.

This is the correct way to handle returns — not ignoring them and accepting inflated ROAS numbers. The more accurately your historical conversion values reflect actual kept-revenue, the better Smart Bidding can optimize going forward.

For high-return-rate product categories (apparel, footwear), returns adjustments can move reported ROAS by 15-25%. That difference is the gap between a campaign that looks profitable and one that actually is.

What Your True Breakeven ROAS Actually Is

Every store has a breakeven ROAS — the point at which the margin generated by ad-driven revenue exactly covers the ad spend. Below this, advertising is destroying value.

Calculate it: Breakeven ROAS = 1 / Blended Gross Margin %

If your average gross margin is 35%: Breakeven ROAS = 1 / 0.35 = 2.86 = 286%

This means any ROAS below 286% is losing money for this store. And this does not account for return rates, payment fees, or fixed overhead.

A more complete breakeven calculation: Breakeven ROAS = 1 / (Gross Margin - Return Rate - Payment Fees - Other Variable Costs)

For a store with 35% gross margin, 10% returns on margin, and 3% fees: Breakeven = 1 / (0.35 - 0.035 - 0.03) = 1 / 0.285 = 351%

Every time you report a 400% ROAS as a win, verify it against your breakeven. At 351% breakeven, a 400% ROAS leaves 49 points of margin above breakeven — approximately 14% profit margin on ad-driven revenue. That is not bad, but it is not “400% ROAS is amazing” either.

The Priority Order

You do not need to implement all of this at once. The order of impact:

  1. Calculate your breakeven ROAS and verify your current campaigns are above it. If they are not, this is the most urgent finding in your entire Google Ads setup.

  2. Apply a flat margin factor to your conversion values using Conversion Value Rules. This is the fastest path to margin-aware bidding.

  3. Implement return adjustments if your return rate is above 10%. The data distortion from unaccounted returns compounds over time.

  4. Move toward product-level margin values in your DataLayer for accounts with variable margins across a large catalog. This is the highest-accuracy option and requires the most technical investment.

ROAS is not a meaningless metric — it is a useful measure of revenue efficiency. But it is a proxy for profitability, not a measure of it. The stores winning at Google Ads in 2026 are the ones that have closed the gap between what they report and what they actually make.

Related Posts

How Remarketing Lists Work in Google Ads — and Why Most Ecommerce Stores Set Them Up Wrong

Google AdsEcommerceAnalyticsGoogle Ads Strategy Series

Incrementality Testing: How to Know If Your Google Ads Are Actually Driving Sales

Google AdsAttributionAnalyticsEcommerceGoogle Ads Strategy Series

Google Ads for International Ecommerce: Multi-Country Campaigns, Currency, and Feed Setup

Google AdsGoogle ShoppingMerchant CenterEcommerceGoogle Ads Strategy Series
Adnan Agic

Adnan Agic

Google Ads Strategist & Technical Marketing Expert with 5+ years experience managing $10M+ in ad spend across 100+ accounts.

Need Help With Your Google Ads?

I help e-commerce brands scale profitably with data-driven PPC strategies.

Get In Touch
Back to Blog