POAS: The Metric Replacing ROAS for Profitable Shopify Brands

David Lopes

TL;DR

  • POAS (profit on ad spend) = profit ÷ ad spend, the profit-aware successor to ROAS. ROAS tells you a campaign made noise; POAS tells you it made money. As margins compress in 2026, ROAS lies louder, because the gap between revenue and profit widens while the ROAS number sits still.
  • The honest version is contribution-margin POAS: net COGS, shipping, and transaction fees out of revenue before dividing (ad spend in the denominator only, break-even at 1.0). Most guides quietly use gross margin and overstate profit by a third. A good POAS is above 1.0, with the real target tied to your margin profile, and you must read it blended at the account level, since per-platform POAS double-counts the same customer and hides a blended loss.
  • Polar makes the honest number trustworthy and fast. The four inputs live in four systems; Polar unifies them in a Snowflake you own, defines POAS once as a governed metric in Synthesizer (contribution margin ships built-in), maps spend to orders with first-party Polar Pixel, proves real lift with Causal Lift, de-duplicates blended POAS with LifetimeID, and lets you ask "POAS by channel net of fees" in plain language via Ask Polar.

POAS measures the profit you keep per advertising dollar, not just the revenue a campaign reports. The acronym stands for profit on ad spend, and the basic formula is gross profit divided by ad spend. ROAS tells you the campaign looked good. POAS tells you whether you actually made money. That gap is the whole point. By the end of this guide you will have the formula (including the honest version most people skip), a clear POAS vs ROAS breakdown, a good POAS target by margin profile, and a straight answer to the question nobody else covers: where the profit data actually comes from.

Use the calculator below to see your own number before you read another word.

POAS calculator: see your real number

Your numbers, per order

Gross-margin POAS what most dashboards show 2.48
Contribution-margin POAS the honest number 2.03
$50.80contribution / order
$25.80profit / order after the ad

You keep $1.03 of profit per ad dollar. Above 1.0 means the campaign actually made money.

The verdict line is the part that stings. Most operators run the numbers once and discover the campaign they were proud of keeps less than they assumed.

What POAS means

POAS measures the gross profit generated per dollar of ad spend, not just the revenue. That is the entire definition, and it is the reason the metric exists.

POAS stands for profit on ad spend. It is the profit-aware successor to ROAS, the metric most Shopify brands grew up on. Where return on ad spend counts top-line revenue, POAS counts what is left after the cost of the product. A campaign can post a strong ROAS and a weak POAS at the same time, and only one of those two numbers pays your bills.

Here is the one-liner to remember. POAS reconciles spend against true cost, so a 1.5 POAS means you kept 1.50 dollars of contribution for every dollar you spent on ads. That framing, profit kept per ad dollar, is what makes POAS the number to lead with in 2026.

If you have seen "poas meaning" or "what does poas stand for" floating around a LinkedIn thread, this is it: profit on ad spend, the metric that asks whether the ad made money rather than whether it made noise.

The POAS formula (and the version everyone gets wrong)

The basic formula

The standard POAS formula is simple.

POAS = gross profit / ad spend

Gross profit is revenue minus the cost of goods sold (COGS). Spend 1,000 dollars on ads, generate 4,000 dollars in revenue at a 60 percent gross margin, and you produced 2,400 dollars of gross profit. That is a 2.4 POAS. Cleaner than ROAS already.

The trouble starts with the word "profit." Most POAS definitions on the internet quietly use gross margin and stop there. That overstates profitability, often badly, because a Shopify order carries more cost than COGS alone.

The honest formula

The version worth measuring nets out every variable cost an order actually triggers, before the ad dollar is counted.

Contribution-margin POAS = (revenue − COGS − shipping − transaction fees) / ad spend

This is contribution-margin POAS, and it is the only version that survives contact with a real profit and loss statement. Shipping is real. Payment processing through Shopify Payments is real. Those costs scale with every order the ad drives, so they belong inside the metric, not in a footnote.

Note the convention: ad spend sits in the denominator only, never in the numerator. That keeps break-even clean. A POAS of 1.0 means the contribution the order generated exactly covered the ad that drove it. Above 1.0 you kept profit on the ad dollar; below 1.0 you lost money.

Here is a worked example built from a realistic Shopify cost stack. Treat it as a model, not a customer figure.

  • Average order value: 100 dollars
  • COGS: 38 percent, so 38 dollars
  • Shipping: 8 dollars per order
  • Transaction fees: 2.9 percent plus 0.30, so about 3.20 dollars
  • Ad spend per order: 25 dollars

Gross-margin POAS looks at revenue minus COGS against ad spend: (100 − 38) / 25 = a 2.48 POAS. Looks healthy.

Contribution-margin POAS layers in the rest of the variable costs: (100 − 38 − 8 − 3.20) / 25 = 50.80 / 25 = a 2.03 POAS. Same order, same campaign, and still profitable, but the honest number is about a third thinner than the gross-margin version implied. Each order clears 50.80 dollars of contribution before the ad, and 25.80 dollars after it. The dashboard said 2.48 and told you to scale hard. The honest number, 2.03, says scale, but with less headroom than you thought, and it is the one that survives a margin dip.

With Polar: The reason two analysts can defend two different POAS numbers is that each one quietly chose which costs to include. In the Synthesizer semantic layer, POAS is a single governed definition (revenue, COGS, shipping, and fees all netted the same way, ad spend in the denominator only), so every report and every channel reads the same contribution-margin number. There is no per-tab improvisation, which means the 2.03 everyone reads is the same one.

This is the gap that quietly sinks brands. We have seen the pattern more than once: a sub-10-million-dollar Shopify brand scaling on a reported strong ROAS that was far thinner, sometimes barely above water, once fees and COGS were netted out. The dashboard said grow. The bank account disagreed.

So why does almost nobody calculate it the honest way? Because the inputs live in three different systems. COGS sits in your inventory or ERP tool. Transaction fees sit in Shopify Payments. Spend sits in Meta and Google. Revenue sits in Shopify. Stitching them into one formula by hand is a fragile spreadsheet that breaks the week someone goes on vacation.

This is exactly where a real ecommerce analytics platform earns its keep. Polar's Custom Metrics and Custom Dimensions let you define POAS once as a metric and apply it everywhere, because a KPI is a definition, not a number. Polar already ships contribution margin as a built-in metric (the CM3, contribution-margin-3, line in its margin waterfall), so the formula is governed, not improvised. Underneath, a dedicated Snowflake instance you can query, export, and replicate stores the COGS and fee feeds, so the calculation runs on a real warehouse rather than a spreadsheet that rots.

POAS vs ROAS

POAS and ROAS answer two different questions. ROAS asks how much revenue an ad returned. POAS asks how much profit it kept.

ROAS POAS
Formula revenue / ad spend contribution / ad spend
What it counts Top-line revenue Profit after COGS, fees, shipping
What it ignores Every cost of fulfilling the order Nothing that scales per order
Tells you The campaign looked good Whether you made money
Best for Quick directional read Scaling decisions, budget calls
Fails when Margins compress LTV is the real payoffSee limitations section

The reason this comparison matters more in 2026 than it did in 2020 is margin. Input costs, freight, and tariff pressure have squeezed contribution margins across DTC. As margin compresses, ROAS lies louder, because the gap between revenue and profit widens. A 4x ROAS that printed cash at a 65 percent margin can lose money at a 45 percent margin while the ROAS number sits perfectly still.

That is the break-even ROAS concept. Every brand has a ROAS floor below which an ad loses money, and that floor moves the moment your margin moves. POAS bakes the floor into the metric so you do not have to recalculate it in your head. Because contribution-margin POAS is built on a 1.0 break-even, the floor is the same number every time: below 1.0 you are underwater.

With Polar: Recalculating a moving break-even floor in your head is exactly the kind of business logic that breaks in spreadsheets. With Custom Metrics, you encode your break-even POAS once as a function of live contribution margin, so the floor updates automatically when COGS or freight shift. Custom Dimensions then let you slice that floor by SKU, margin tier, or shipping zone, so you see which products are actually below water rather than reading one blended threshold for the whole catalog.

Run the two side by side and the inversions show up fast. A 4x ROAS campaign on a low-margin, heavy-shipping SKU can quietly lose money. A 2x ROAS campaign on a high-margin, low-cost product can print cash. ROAS ranks them backwards. POAS ranks them right.

There is a catch most "POAS vs ROAS" posts skip: a profit number per channel is only as trustworthy as the attribution behind it. If you cannot reliably map ad spend to the orders it drove, your POAS is built on sand. Signal loss from privacy changes makes this harder every year.

This is where the attribution layer decides everything. Polar Pixel is a first-party, server-side pixel with click-based attribution only, so it does not inflate results with view-through credit, and it applies one conversion definition identically across Meta, Google, and TikTok. That gives you a clean spend-to-order map that survives signal loss. Causal Lift, Polar's GeoLift-based incrementality testing, then answers the harder question: is the channel actually causing sales, or taking credit for them? You want to optimize POAS on true incremental lift, not last-click vanity.

A quick note on the foil. Generic data-stack tools like dbt, Cube, AtScale, or Segment can model these numbers if you hire someone to build it. They were never built for the Shopify ad-profit question. You would be assembling from parts what an ecommerce analytics platform ships out of the box. See the deeper ROAS calculation breakdown for the mechanics of the revenue-side metric.

What is a good POAS

A good POAS is any value above 1.0, because above 1.0 means you kept profit on the ad dollar. But a good POAS target depends on your contribution margin, so the real benchmark is tied to your margin profile, not a universal number. This is also why blended measures like marketing efficiency ratio (MER) matter: they read profit across the whole account rather than one channel at a time.

Here is an original benchmark band, synthesized for DTC brands by gross margin profile. It uses the same break-even = 1.0 convention as the calculator above, so a value here means the same thing it means in your result line. Treat the minimums as a floor for sustainable scaling, not a goal.

Gross margin profile Example margin Minimum viable POAS Healthy scaling POAS
Low margin 40% above 1.0Thin cushion 1.4+
Mid margin 60% above 1.0 1.6+
High margin 75% above 1.0 2.0+

Higher margin gives you more room, so a high-margin brand can carry a higher target comfortably while a low-margin brand has to defend every point.

Now the trap. A "good" POAS on a single channel can hide a blended loss. This is the omnichannel-CAC trap: when each platform claims credit for the same customer, every channel reports a flattering POAS while your blended profit quietly bleeds. Read POAS per platform and every channel looks like a winner. Read POAS at the account level and the truth shows up.

Account-level POAS truth is the principle that matters here. Per-platform POAS lies through double-counting. Blended POAS decides.

Getting to blended truth needs two things. LifetimeID, Polar's identity resolution layer, stitches one persistent customer identity across DTC, POS, wholesale, and marketplaces from first-party pixel data and hard purchase signals like email and order ID. That fixes the blended-CAC over-crediting that powers the omnichannel trap. Synthesizer, the commerce semantic layer with more than 400 pre-built ecommerce metrics, then gives you a blended, deduplicated view, so POAS is read once at the account level instead of summed up from per-platform silos that each tell a self-serving story.

How to improve POAS

Improving POAS is not a growth hack. It is four levers, pulled deliberately.

Raise margin. Renegotiate COGS, consolidate shipping, or shift mix toward higher-margin SKUs. Every point of margin lifts POAS directly, because it widens the gap between revenue and cost before the ad dollar is even counted.

Raise AOV. A higher average order value spreads the same shipping and transaction-fee burden across more revenue, so contribution-margin POAS climbs even if ad cost holds steady. Bundles and thresholds do real work here.

Cut wasted spend. Kill the campaigns that win on ROAS but lose on POAS. The benchmark band above tells you where your floor sits.

Shift budget to incremental channels. Move spend toward the channels Causal Lift proves are actually driving lift, not the ones merely claiming last-click credit.

There is a fifth lever most ad-focused operators forget: retention. Email and SMS are pure profit multipliers, because they generate revenue at near-zero variable acquisition cost, which lifts blended POAS without touching ad spend. The catch is that flow revenue depends on capturing the abandonment events your ESP misses once its cookies expire.

The Klaviyo Flow Enricher solves that trigger problem directly. It uses first-party identity resolution to recover roughly 70 percent more abandonment events than Klaviyo captures on its own, which typically lifts abandoned-flow revenue by 20 percent or more, so flows fire for the shoppers Klaviyo would otherwise miss. To make retention work with your margin reality rather than against it, Activations (Klaviyo Audiences) is the piece that pushes profit-aware segments back into Klaviyo, so you can target and suppress by contribution margin instead of raw purchase behavior.

Where the POAS data actually comes from

This is the section every competitor skips, and it is the one that decides whether you can trust your POAS at all.

The honest formula has four inputs from four systems. Revenue lives in Shopify. COGS lives in your inventory or ERP tool. Fees live in Shopify Payments. Spend lives in Meta and Google. Each lives in its own login, on its own refresh schedule, in its own format.

That fragmentation creates the Question Latency Tax. Your POAS is only as fast as the slowest manual export in the chain. By the time someone has pulled four reports and reconciled them in a spreadsheet, the number is a week old and the budget decision it was supposed to inform has already been made on gut feel. You pay that tax every single week.

The fix is to put all four inputs in one place and then ask for the answer. With your data unified in a dedicated Snowflake instance you can query, export, and replicate, Ask Polar and the Polar MCP let you query in plain language: "what was my POAS by channel last week, net of fees." You ask, you get a cited answer, you do not pivot-table. The AI reasons against a governed semantic layer, not raw tables, so the POAS it returns matches the POAS in your reports. By 2028 the dashboard is a debug tool, not a product. You ask the question; you do not go hunting for it.

An honest limitation

POAS is not a perfect metric, and pretending otherwise would be a disservice. POAS can wrongly punish high-LTV acquisition. A campaign that brings in subscribers or repeat buyers can post a weak first-order POAS while being one of the most profitable things you do over a customer's lifetime. Judged on POAS alone, you would cut it.

So POAS needs an LTV companion. Read first-order POAS to control acquisition discipline, and read customer lifetime value to make sure you are not starving your best long-term channels. As a Polar analytics lead puts it: POAS keeps you honest on the order, LTV keeps you honest on the customer. You need both numbers in the same view, which is the whole argument for measuring them on one platform instead of two.

POAS FAQ

POAS means profit on ad spend. POAS measures the profit you keep per advertising dollar after the cost of the product, rather than the raw revenue a campaign reports.
You calculate POAS by dividing profit by ad spend. The basic POAS calculation is gross profit divided by ad spend; the honest POAS calculation nets COGS, shipping, and transaction fees out of revenue first, then divides that contribution by ad spend.
A good POAS is any value above 1.0, because that means you kept profit on the ad dollar. A good POAS target depends on your contribution margin, so a high-margin brand can aim higher than a low-margin one.
The difference between POAS and ROAS is cost. ROAS divides revenue by ad spend; POAS divides profit by ad spend, so POAS shows whether the campaign actually made money while ROAS only shows whether it made revenue.
POAS is better than ROAS for scaling decisions, because POAS accounts for the costs ROAS ignores. ROAS is still a fast directional read, but POAS is the number that tells you whether to spend more.
You improve POAS by raising margin, raising average order value, cutting spend that loses on profit, and shifting budget to incremental channels. Retention through email and SMS also improves POAS by adding near-zero-cost revenue.
Contribution-margin POAS accounts for shipping and fees; basic gross-margin POAS does not. Because shipping and transaction fees scale with every order, the honest version of POAS includes them in the numerator before dividing by ad spend.
Google Ads and Meta optimize toward value and target ROAS, not POAS directly, so you feed them profit-adjusted conversion values to approximate POAS. The cleaner path is to measure true POAS in your own analytics and steer budget from there.
To be profitable on the ad dollar, target a POAS above 1.0 at minimum, but set your real target above your break-even point given your contribution margin and CAC payback window.

See your real POAS in 20 minutes

The POAS formula only works when COGS, fees, and spend live in one place. That is the catch that turns a simple metric into a data problem, and it is the problem Polar was built to solve.

Book a 20-minute Polar walkthrough. We will connect your Shopify data, show your contribution-margin POAS by channel net of fees, and let you ask the number out loud instead of building it in a spreadsheet. Twenty minutes, your real data, no slideware.

Table of contents

Make strategic decisions in minutes

See every metric that matters, in one place.

Book a demo

Ecommerce Benchmark

4,000+ brands, refreshed weekly.

See the benchmark

Frequently asked questions

Ready to stop guessing and start growing?

Make strategic decisions in minutes, not weeks.

Book a demo