POAS: The North Star Metric for E-Commerce Marketing

ROAS has been the default performance metric for e-commerce advertising for over a decade. It's easy to calculate, easy to report, and easy to set targets around. It is also, for most e-commerce businesses, the wrong metric to optimize toward. ROAS measures revenue. Revenue is not profit. And profit is what actually keeps the lights on. POAS — Profit on Ad Spend — fixes this blind spot, and for any brand running Google or Meta ads across a catalog with variable margins, it should replace ROAS as the primary bidding and performance signal.

TL;DR — ROAS tells you how much revenue you generated per dollar spent on ads. POAS tells you how much gross profit you made. For e-commerce brands with variable margins, POAS is the metric that actually tells you whether your campaigns are making money — and the signal you should be feeding to Google and Meta's bidding algorithms so they optimize toward actual profit, not just top-line revenue.

What Is POAS (Profit on Ad Spend)?

POAS stands for Profit on Ad Spend. It is a performance metric that measures how much gross profit you generate for every dollar you spend on advertising. Where ROAS divides revenue by ad spend, POAS divides gross profit by ad spend — making it a fundamentally more honest measure of advertising efficiency for any business that does not sell at 100% margin.

The formula is straightforward:

POAS = Gross Profit ÷ Ad Spend
Gross Profit = Revenue − Cost of Goods Sold (COGS)

COGS in an e-commerce context includes the direct cost of the products you sell: product cost, manufacturing, packaging, shipping, and any fulfillment costs directly tied to each unit. It does not include overhead, marketing spend, or fixed operating costs. The result is a metric that tells you: for every dollar we put into advertising, how many dollars of actual gross profit came back?

POAS differs from net profit margin because it excludes fixed operating costs and focuses specifically on the relationship between ad spend and the variable profit from the sales that spend generates. It sits above net profit in the P&L but below revenue — which is exactly where the e-commerce advertising conversation needs to happen. Revenue growth with shrinking margins is not growth. POAS makes that visible.

A POAS above 1.0 means you are generating more gross profit than you are spending on ads. A POAS below 1.0 means ads are costing you more than the margin they produce. Most e-commerce businesses should target a POAS that leaves sufficient gross profit to cover operating costs and deliver a meaningful net margin — typically somewhere between 2x and 4x depending on the business model, AOV, and fixed cost structure.

Why ROAS Is the Wrong North Star

The problem with ROAS is not that it is inaccurate — it accurately measures the revenue return on ad spend. The problem is that revenue is the wrong thing to measure. Two products generating the same revenue can have wildly different impacts on profit, and ROAS treats them identically.

Consider a typical mid-size e-commerce brand with a diverse catalog. Product A is a branded accessory with a 65% gross margin. Product B is an electronics bundle with a 12% gross margin. Both products sell at $200 average order value. Both produce $200 in revenue when an ad drives a conversion. ROAS counts both as identical outcomes. But the profit picture could not be more different:

  • Product A: $200 revenue × 65% margin = $130 gross profit
  • Product B: $200 revenue × 12% margin = $24 gross profit

If your campaigns are spending $40 to acquire each order, Product A is highly profitable. Product B is actively destroying value — you are spending $40 to generate $24 in gross profit. But in your ROAS report, both campaigns look identical: 5x ROAS. This is not a hypothetical edge case. For any brand with a multi-product catalog, variable supplier costs, seasonal discount activity, or bundling, this kind of hidden margin distortion is the norm, not the exception.

The problem compounds when Smart Bidding enters the picture. Google's Target ROAS and Meta's cost-per-result optimization are trained on the conversion values you send them. If you send revenue as the conversion value, the algorithm's job becomes "maximize revenue per dollar spent." That objective is meaningfully different from "maximize profit per dollar spent," and the algorithm will optimize accordingly — happily spending budget to acquire high-revenue, low-margin orders because that is what you told it to do.

The second failure mode of ROAS is that it actively discourages healthy margin management. When your optimization target is revenue, discounts look like a performance improvement — they can lift conversion rates and volume, and ROAS goes up even as profit per order goes down. When your target is POAS, discounts that compress margin show up immediately as performance degradation. POAS creates the right incentive alignment between marketing and finance.

None of this means ROAS has no role. It is still a useful top-level revenue efficiency benchmark, and it is the metric Google and Meta report natively. But as a bidding signal and as the metric that determines where budget goes and how campaigns are prioritized, ROAS is structurally broken for margin-variable businesses. POAS is the fix.

How to Calculate POAS

The calculation requires two inputs most e-commerce businesses already have: order revenue and COGS per order (or an average margin percentage per product or product category). Here is the full worked example using the numbers from the brief:

Scenario: $1,000 in ad spend generates $5,000 in revenue. The COGS on those orders is $3,000.

ROAS = $5,000 ÷ $1,000 = 5x

Gross Profit = $5,000 − $3,000 = $2,000

POAS = $2,000 ÷ $1,000 = 2x

A POAS of 2x means you made $2 in gross profit for every $1 spent on ads. Whether 2x is good depends on your business — specifically how much of that gross profit needs to cover fixed operating costs and deliver acceptable net margins. A brand with low fixed costs and efficient operations might be very profitable at a 2x POAS. A brand with high warehouse costs, large teams, or significant non-marketing overhead might need 3x or 4x to be sustainably profitable.

The key is calculating your minimum viable POAS before you start setting targets. A reasonable starting framework:

  • Break-even POAS: Ad Spend ÷ (Ad Spend − Fixed Costs Covered by This Channel). This tells you the minimum POAS at which the channel pays for itself after contribution to overhead.
  • Target POAS: Break-even POAS plus a buffer for the net profit margin you need the business to generate. If your overhead requires ads to contribute 30% more than break-even, your target POAS should be set accordingly.

For brands with a diverse catalog, POAS can be calculated at multiple levels: account-wide, per campaign, per product category, or per SKU. The more granular you go, the more actionable the insight — but you need the COGS data to match. Start at the campaign or product category level if per-SKU COGS data is not readily accessible.

One practical note: POAS calculated on gross profit (revenue minus COGS only) will always be lower than ROAS. Do not compare them directly or use the same targets. If your current ROAS target is 4x and your average gross margin is 40%, your equivalent POAS target is roughly 1.6x (4x × 40%). This recalibration is necessary before presenting POAS targets to leadership — the absolute numbers will look lower, but they are measuring something fundamentally more meaningful.

ROAS vs. POAS: A Side-by-Side Comparison

The table below maps out the functional differences between ROAS and POAS so you can make an informed decision about where each metric belongs in your measurement framework.

ROAS POAS
What it measures Revenue generated per $1 of ad spend Gross profit generated per $1 of ad spend
Formula Revenue ÷ Ad Spend Gross Profit ÷ Ad Spend
What it ignores Cost of goods sold, margin variability across products Fixed overhead, operating costs (by design)
Bidding signal sent to platform Order revenue — algorithm chases revenue Gross profit — algorithm chases actual margin
Best for High-margin, single-product, or uniform-margin businesses; top-level revenue reporting Multi-product catalogs, variable-margin businesses, brands managing profitability at scale
Risk of misuse Optimizing toward revenue growth that destroys margin Requires accurate COGS data and sufficient conversion volume to work reliably

ROAS is not obsolete — it remains a useful channel-level revenue efficiency benchmark and is the metric your ad platforms report natively. But as a bidding objective and performance north star for a margin-variable e-commerce business, POAS is the more accurate, more actionable, and more profitable alternative.

There is a secondary benefit to tracking profitability at the individual sale level that often goes unremarked: it gives you natural visibility into contribution margin by channel. Contribution margin — revenue minus variable costs — is the correct lens for judging marketing performance. It tells you not just how much revenue a channel drove, but how much of that revenue is available to cover fixed costs and generate profit. Most brands track contribution margin at the business level but not at the channel level, because they lack the per-order profit data to attribute it back to the source. Once you have gross profit flowing through your conversion tracking, you can aggregate those values by channel, campaign, and audience to see contribution margin per source in a way that revenue-based reporting cannot provide. That view changes how you make budget allocation decisions — not "which channel drives the most revenue?" but "which channel contributes the most margin per dollar?"

Sending Profit-Aligned Signals to Google and Meta

The practical implementation of POAS optimization comes down to one change: pass gross profit as the conversion value instead of revenue. Both Google Ads and Meta's ad platform use the conversion value you send to inform their bidding algorithms. Change the value, and you fundamentally redirect what the algorithm optimizes toward.

Implementation in Google Ads

Google Ads' value-based bidding relies on the conversion value parameter in your purchase conversion tag. In a standard e-commerce setup using GTM, this value is typically pulled from a dataLayer variable that contains the transaction revenue. The change required is to replace that revenue variable with a gross profit variable — either calculated in the dataLayer by your backend before the purchase confirmation page loads, or derived dynamically in GTM using a custom JavaScript variable that subtracts COGS from revenue.

The cleanest approach is server-side: have your e-commerce platform push both revenue and gross_profit into the dataLayer on the order confirmation page. Your backend has access to per-SKU COGS at order time and can calculate gross profit accurately across mixed carts. In GTM, create a Data Layer Variable mapped to gross_profit and replace the revenue variable in your Google Ads Conversion Tracking tag's conversion value field.

If your backend cannot easily surface per-order COGS, a category-level average margin is an acceptable approximation to start with. Map product categories to average gross margin percentages, and use a custom JavaScript variable in GTM to multiply revenue by the appropriate margin. This is less precise but still dramatically more aligned with actual profitability than sending revenue alone.

For proper conversion tracking that feeds profit values correctly, you also need your enhanced conversions setup to remain intact — the enhanced conversion layer that sends hashed customer data should continue to fire with your profit-value conversion tags. The profit signal improves what the algorithm optimizes toward; enhanced conversions improve how accurately it attributes those conversions. Both matter.

Implementation in Meta via Conversions API

Meta's ad optimization works the same way: the conversion value field in a Purchase event drives Meta's value-based bidding. To send profit values rather than revenue values, you need to modify the value parameter in your Meta purchase event — whether that fires via the browser Pixel, the Meta Conversions API, or both.

If you are running a dual Pixel + CAPI setup (which you should be — see our guide on Facebook CAPI and Pixel setup via GTM), you need to pass the gross profit value through both channels with matching event_id parameters for deduplication. The CAPI implementation gives you the cleanest path to sending accurate per-order profit values, since the server side has direct access to your order database and COGS data at the time the event is sent.

In practice, the Meta Pixel and CAPI implementation for POAS looks like this: at the moment of purchase confirmation, your server triggers the CAPI event with value set to the gross profit of the order (not the revenue), currency set correctly, and all available customer information parameters included to maximize Event Match Quality. Simultaneously, the browser Pixel fires with the same gross profit value and the same event_id. Meta deduplicates the two events and uses the profit value to train its Value Optimization algorithm.

Implementation recommendation: run a separate profit conversion event in parallel. Rather than replacing the existing conversion value in your current Google Ads and Meta campaigns right away, set up a dedicated parallel conversion event on each platform that passes gross profit as the value. In Meta, this means a standalone CAPI event — for example, a PurchaseProfit event — with value set to gross profit instead of revenue. In Google Ads, create a separate conversion action (e.g., "Purchase – Profit Value") fed by a parallel GTM tag. Running both events simultaneously lets you test the impact of profit-value optimization on a subset of campaigns while keeping your existing revenue-value tracking intact for comparison. The parallel setup is especially useful in the first 4–8 weeks: you can benchmark Smart Bidding and Meta algorithm performance between campaigns using profit signals versus revenue signals, build the data-backed case for a full rollout, and present clean before/after evidence to stakeholders before committing to the migration across the full account.

One important caveat: both Google and Meta require time to learn from new conversion value signals. After switching from revenue to profit values, expect a 2–4 week learning period during which performance may fluctuate. Do not assess the change during this window. Set your bidding targets conservatively at first — you can tighten them once the algorithms have stabilized on the new signal.

Implementing POAS Bidding in Google Ads

Once you are passing gross profit as the conversion value, you have the foundation for POAS-aligned Smart Bidding. The practical implementation in Google Ads uses the Target ROAS (tROAS) bidding strategy — but since your conversion values now represent profit rather than revenue, your tROAS target effectively becomes a target POAS. Google's native interface does not have a "tPOAS" bidding strategy; the concept is implemented by redefining what the conversion value represents.

Here is how the translation works: if you previously had a tROAS target of 400% (4x revenue return), you need to recalibrate for profit values. If your catalog averages a 40% gross margin, a 4x revenue ROAS target corresponds roughly to a 1.6x POAS target. In tROAS terms, that would be a 160% target when your conversion values represent profit. Run this calculation for your specific business before setting the new target — do not lift and shift your old ROAS target onto a profit-value setup.

Google's Smart Bidding will use the profit conversion values to allocate bids differently than it did with revenue values. High-margin products that were previously underserved because they often have lower average order values will see increased bid pressure. Low-margin high-revenue products may see bids decrease or campaigns tighten. This is exactly the behavior you want — the algorithm is now directing budget toward where you actually make the most money, not just where the most revenue lives.

For campaigns with mixed product sets, consider whether campaign structure adjustments are warranted alongside the POAS migration. If a single Shopping or Performance Max campaign is mixing very-high-margin and very-low-margin products, the algorithm will average across them. Separating product groups by margin tier — even roughly — gives Smart Bidding more room to optimize each tier toward its own POAS target. This pairs well with the asset group structure in Performance Max campaigns and the ad group structure in Standard Shopping.

Volume requirements for tPOAS to work reliably are similar to those for tROAS: Google recommends at least 50 conversions per month at the campaign level for Smart Bidding to operate efficiently. Below that threshold, the algorithm does not have enough data to bid reliably on individual auctions, and you may see erratic performance. For lower-volume accounts, consider starting with Maximize Conversion Value (with no ROAS/POAS target) while you build up profit conversion data, then add the target once volume supports it.

Finally, connect your GA4 ecommerce tracking to report on profit-aligned performance in addition to your platform-reported metrics. GA4 can receive the same gross profit values via the value parameter in its purchase event, giving you a platform-independent view of profit performance across all channels — not just what Google and Meta report back in their own dashboards. This cross-platform profit view is essential for making accurate budget allocation decisions across channels.

Common POAS Implementation Mistakes

Using inaccurate or static COGS data. POAS is only as accurate as your cost data. If your COGS figures are outdated, averaged across too broad a category, or do not account for seasonal supplier cost changes, your profit conversion values will be wrong — and the algorithm will optimize toward an inaccurate signal. Build a process to keep COGS data current, especially for your highest-volume SKUs. Even a 10% error in COGS on a high-volume product can meaningfully distort the profit signal you are sending to the algorithm.

Not accounting for returns and refunds. If your return rate is significant, gross profit calculated at the moment of sale overstates actual profit. A customer who orders a high-margin product and returns it a week later generated no profit — but your conversion tracking may have already credited the campaign. For high-return-rate businesses, consider using a delayed conversion setup where you send the profit conversion after the return window closes, or apply a return-rate adjustment to your COGS to reflect average realized profit per order.

Launching without enough conversion volume. Switching to profit-based conversion values with insufficient volume is one of the fastest ways to put Smart Bidding into an extended learning mode. Before making the switch at the campaign level, verify you have at least 30–50 conversions per month in that campaign, ideally more. If volume is low, consolidate campaigns or run in Maximize Conversion Value without a hard target until volume builds.

Forgetting to update reporting and dashboards. If your team's performance dashboards are still showing ROAS targets and revenue-based benchmarks, they will interpret POAS-era performance incorrectly. A drop from 5x ROAS to what looks like 2x in the new framework is not underperformance — it is the same performance viewed through a more honest lens. Update dashboards, reporting templates, and any leadership-facing metrics to reflect the new framework before rolling it out, not after.

Mixing revenue and profit values across campaigns or platforms. If some campaigns send revenue values and others send profit values, your cross-campaign comparisons are meaningless. Commit to the migration fully, or maintain explicit separation in reporting so the two measurement frameworks are never directly compared. Partial rollouts are the worst outcome — they create confusion without delivering the coherent profit signal the algorithm needs.

Treating POAS as a set-and-forget metric. Margins change. Supplier costs change. Product mix shifts seasonally. A POAS target set in Q1 may be meaningfully wrong by Q4. Build a quarterly review process into your measurement framework to recalibrate COGS data, review POAS targets, and assess whether campaign structure still reflects the current margin distribution across your catalog. POAS alignment is a practice, not a one-time configuration. For help setting this up correctly from the start, see our post on Google Ads conversion tracking best practices.

Frequently Asked Questions

POAS stands for Profit on Ad Spend. It measures how much gross profit you generate for every dollar spent on advertising. The formula is: POAS = Gross Profit / Ad Spend, where Gross Profit = Revenue minus Cost of Goods Sold (COGS). Unlike ROAS, which only measures revenue, POAS accounts for what it actually costs to produce and deliver the products you sell — giving you a true read on whether your advertising is profitable.

ROAS (Return on Ad Spend) measures revenue generated per dollar of ad spend. POAS (Profit on Ad Spend) measures gross profit per dollar of ad spend. The critical difference is that ROAS completely ignores your cost of goods sold. A 5x ROAS sounds strong, but if your average gross margin is 20%, you need a 5x ROAS just to break even after COGS — before any other operating expenses. POAS removes this blind spot by incorporating margin directly into the metric.

The first step is changing what you pass as the conversion value in Google Ads. Instead of sending the order revenue as the conversion value, send the gross profit (revenue minus COGS) for each transaction. Once Google's Smart Bidding is trained on profit values rather than revenue, you switch from a target ROAS strategy to a target POAS strategy by setting your tROAS target to reflect a profit-based return. Accurate COGS data and sufficient conversion volume (50+ conversions per month per campaign) are prerequisites for this to work reliably.

Brady Hancock
Brady Hancock
Fractional Chief Data & Analytics Officer

Brady specializes in profit-aligned measurement strategy for e-commerce brands — building the tracking infrastructure that ensures ad platform algorithms chase margin, not just revenue.

Ready to Optimize for Profit, Not Just Revenue?

If your Google and Meta campaigns are still bidding on revenue signals, you are leaving profit on the table. We set up profit-aligned conversion tracking and POAS bidding frameworks that put your ad spend to work correctly.

Schedule a Free Call