Ecommerce performance · 14 min read
POAS for ecommerce: a contribution margin framework
Revenue ROAS tells you how much attributed revenue advertising generated. POAS asks the harder commercial question: how much contribution remained after product and variable order costs, relative to media spend?
The direct answer: ROAS measures revenue, POAS measures economic value
ROAS divides attributed revenue by advertising spend. It is useful, but it treats every unit of revenue as economically equal. Two campaigns can report the same ROAS while producing very different outcomes because their product costs, discounts, fulfilment costs, payment fees and return rates differ.
POAS, profit on ad spend, compares a chosen profit or contribution measure with media spend. POAS is not a universally standardised accounting metric, so the numerator must be documented. In this guide, contribution POAS uses pre-ad contribution: net sales minus cost of goods sold, returns and variable order costs. Divide that figure by advertising spend.
The objective is not to replace one dashboard ratio with another. It is to connect catalogue, order, cost and media data so campaign decisions increase the contribution available to cover fixed costs and operating profit, not only top-line revenue.
Why a high ROAS can still hide an unprofitable campaign
A product with a 70 percent pre-ad contribution can support a much higher acquisition cost than one with a 20 percent contribution. If both products feed the same revenue value into an automated campaign, bidding can learn to favour the product that creates impressive sales volume but leaves little cash behind.
Shopify's official profit reporting defines gross profit as net sales minus product cost and explains that discounts and refunds change margin. That is a sound starting point, but advertising decisions may require a wider contribution view. Shipping subsidies, packaging, payment processing, fulfilment and expected return costs can all vary with an order.
Keep the layers explicit. Gross profit is an important accounting view. Pre-ad contribution is an operating view of how much an order can afford to spend on acquisition. Combining the two under a generic profit label creates false precision.
| Metric | Campaign A | Campaign B |
|---|---|---|
| Attributed net revenue | €10,000 | €10,000 |
| Advertising spend | €3,000 | €3,000 |
| Revenue ROAS | 3.33 | 3.33 |
| Pre-ad contribution | €4,500 | €2,400 |
| Contribution POAS | 1.50 | 0.80 |
| Post-ad contribution | €1,500 | −€600 |
The formulas marketing and finance should share
Begin with net sales. For operational analysis, this will usually mean revenue after discounts and refunds, excluding tax where tax is not company revenue. Subtract cost of goods sold and the other variable costs caused by the order. The result is pre-ad contribution.
Contribution POAS equals pre-ad contribution divided by advertising spend. A value of 1.00 means pre-ad contribution exactly covers media spend. Post-ad contribution equals pre-ad contribution minus media spend. A positive result is not the same as net profit because salaries, technology, premises and other fixed costs still need to be funded.
There is no universal good POAS target. A 1.00 threshold is the media break-even point under this definition, not a safe growth target. Your operating target should preserve contribution for fixed costs and profit while allowing for attribution uncertainty, delayed returns and the different economics of new and returning customers.
- Revenue is net of discounts, refunds and taxes that are not company revenue.
- COGS is tied to the sold SKU and ideally the cost valid when it was sold.
- Variable order costs have a documented inclusion rule.
- Media spend uses the same period, currency and time zone as orders.
- The model separates pre-ad contribution, POAS and post-ad contribution.
- The target leaves room for fixed costs and the required operating profit.
The MARGIN framework: from cost model to campaign decision
M is Model. Finance and marketing agree one documented formula and three named layers: gross profit, pre-ad contribution and post-ad contribution. Field names should state the layer they contain. An undefined profit column should never control budget.
A is Attribution boundary. Record which system assigns an order to a campaign, the lookback window it uses and how this differs from the whole-business view. Platform-attributed POAS remains an attribution metric. Causal impact requires an appropriate holdout or experiment.
R is Reconcile. Connect every order through a stable transaction_id and reconcile commerce, payment, analytics and ad-platform records. Google Analytics recommends transaction_id, value, currency and item data for purchase, while refund supports full and partial returns.
G is Granularity. Keep cost at SKU or variant level wherever unit economics differ. A store-wide average is acceptable for an initial estimate, but it can reward low-margin products and suppress high-margin ones.
I is Inputs to bidding. Once values are stable, pass an economic value rather than raw revenue into the advertising platform. Google value-based bidding optimises the value you report, which makes the business definition as important as the tag or API.
N is Normalise and monitor. Standardise currencies, taxes, time zones, return lag and cost changes. Monitor COGS coverage, orders without transaction IDs, processing delay, reconciliation gaps and sudden movement in average contribution.
Preserve the economics of each order in the data model
A useful minimum record includes transaction_id, date, currency, order source, line items with SKU and quantity, net price, discount, tax, refund, COGS and variable order costs. Keep media channel, campaign and spend alongside that commercial record. The same calculation can then serve campaign, market, category, product and customer-type analysis.
Do not overwrite historical orders with today's catalogue cost. If purchase cost changes after a sale, a current-cost join rewrites the economics of the past. Shopify notes that its profit reports depend on cost recorded at the time of sale and that a static cost field is limited in dynamic reporting. Serious analysis needs a cost snapshot or dated cost version.
Google Merchant Center supports the cost_of_goods_sold attribute for additional estimated gross-profit reporting when conversions with cart data are implemented. This is useful channel reporting, but Google's own wording is estimated gross profit. Your internal contribution may include more costs and should remain the commercial source of truth.
| Data | Primary source | Control |
|---|---|---|
| Net sales and refunds | Commerce platform or ERP | Reconcile orders and payments |
| SKU-level COGS | ERP, PIM or procurement | Coverage, currency and effective date |
| Variable costs | Finance and logistics | Rules by market and delivery method |
| Campaign and click | Ad platform and analytics | Stable IDs and documented attribution window |
| Advertising spend | Platform or finance export | Same period, currency and included fees |
Returns, cancellations and partial refunds must restate value
An ecommerce conversion is not always final at payment confirmation. The customer may cancel, return part of the basket or receive a full refund. If reporting preserves the original value, a campaign that attracts fragile orders will look stronger than it is. Treat the return as a later change to the same transaction.
Google Ads conversion adjustments support restate, which changes conversion value, and retract, which removes a conversion. Transaction ID is central to identifying online conversions. Google also explains that these adjustments affect conversion-value reporting and ROAS bidding, so the returns process belongs inside the measurement architecture.
Define a maturity window. A daily dashboard can label POAS as preliminary, while a weekly or monthly cohort view uses more mature return data. Compare campaigns at the same cohort age or the newer period will systematically appear healthier.
Using contribution value in automated bidding
Value-based bidding does not discover your economics automatically. It optimises the value you send. Revenue inputs seek more revenue within the strategy's constraints. A reliable contribution input lets the bidder distinguish orders with identical revenue but materially different commercial value.
Migrate in stages. Send the new value while the existing strategy continues, then monitor coverage, range, lag and stability. Google's current guidance recommends uploading values for three weeks or one to two conversion cycles before activating value-based bidding. Avoid artificial historical backfills simply to create more data.
When SKU-level volume is sparse, begin with stable margin bands or product categories. Truthful, differentiated values are better than a falsely precise model with missing costs. Evaluate any bidding change against contribution, not only the ROAS displayed by the platform.
POAS does not solve attribution or replace the P&L
POAS improves the economic quality of attributed conversions, but it does not prove the ad caused the order. A platform can claim a purchase from a customer who would have bought anyway. Combine profit reporting with incrementality testing when allocating material budgets or assessing channels that capture existing demand.
POAS is not company net profit either. Salaries, rent, development, software and other fixed costs may sit outside the numerator. Use POAS for marginal media and product-mix decisions, then reconcile the total outcome with the P&L and cash flow.
A mature operating system uses three views: platform contribution POAS for fast optimisation, blended contribution across all channels for the whole picture and incrementality testing for causality. Divergence between the views is a reason to investigate, not an invitation to choose the most flattering number.
A 30-day implementation plan
In week one, agree the formula and data owners. Define net revenue, included costs, COGS granularity, shipping treatment, refunds and required contribution. Manually reproduce the result for ten real orders with both finance and marketing.
In week two, connect records through transaction_id and SKU. Measure cost coverage, duplicate purchase events, missing currencies and differences between commerce orders and analytics purchases. Resolve structural gaps before changing bidding.
In week three, build a decision dashboard by campaign, category, product, market and customer type. Show revenue, ROAS, pre-ad contribution, POAS, post-ad contribution and the share of mature orders. Alert on missing COGS and unusual shifts.
In week four, start a controlled transition. Observe the new value first, then test it in a limited account segment against a pre-defined commercial outcome and a sufficient evaluation window. Scale only when contribution, data stability and the whole-store result support the change.
Sources and methodology
- Profit reports (Shopify Help Center, accessed 6 October 2026)
- Cost of goods sold [cost_of_goods_sold] (Google Merchant Center Help, accessed 6 October 2026)
- Set up and test reporting with conversions with cart data (Google Ads Help, accessed 6 October 2026)
- About Smart Bidding using value-based bidding for Search and Shopping (Google Ads Help, accessed 6 October 2026)
- About conversion adjustments (Google Ads Help, accessed 6 October 2026)
- Measure ecommerce (Google Analytics for Developers, accessed 6 October 2026)
Frequently asked questions
What is POAS?
POAS means profit on ad spend. Because it is not universally standardised, the business must define the numerator. In this guide, contribution POAS is pre-ad contribution divided by advertising spend.
What is the difference between ROAS and POAS?
ROAS uses attributed revenue. POAS uses a chosen profit or contribution measure, taking account of at least product cost and, in a useful operating model, returns and other variable order costs.
What is a good POAS?
There is no universal target. Under this guide's definition, 1.00 covers media spend but not fixed costs or required profit. Set the target from your economics and the quality of your measurement.
Can Google Ads optimise for profit?
Google Ads value-based bidding can optimise the value a business reports. Profit-led bidding therefore requires a reliable economic value and validation of its coverage, lag and stability before strategy changes.
How should ecommerce returns be handled?
Connect the refund to the original transaction_id and update the order value. Google Ads supports restating or retracting conversions, while GA4 supports the refund event.
Does POAS measure incremental advertising impact?
No. POAS improves the economics of attributed conversions but does not establish causality. Use a suitable experiment or holdout to estimate sales genuinely caused by advertising.