
ROAS tells you how many dollars came back for every dollar you spent. Profit tells you what was left after product cost, shipping, handling, and payment fees came out of that revenue. One is a top-line number, the other is what the business actually keeps.
But a strong ROAS leading to thin profits isn’t one missing number, it’s a set of gaps the standard dashboard view was never built to close and together they explain why a 4x ROAS can still leave very little margin.
This article walks through each gap, and shows how Bloom brings the missing numbers into one view.
Key takeaways
ROAS is a revenue metric, not a profit metric, and the gap between them is where budget decisions quietly go wrong.
Five blind spots sit inside most ad dashboards: hidden order costs, product margin mix, new vs repeat blending, attribution model effects, and the lack of a profit lens.
Metrics like Gross Profit, Contribution Margin, and POAS turn ROAS into something you can run a business on.
Bloom brings revenue, costs, attribution, and profit together so each blind spot becomes visible.
Why ROAS vs profit ecommerce isn’t the same conversation
ROAS is one of the most commonly used metrics for measuring ad performance because it is quick to calculate and easy to compare across campaigns. It tells merchants how much attributed revenue they generated for their ad spend. What it does not tell them is how much they actually kept.
That gap is the whole point of the roas vs profit ecommerce debate. When ROAS is the only lens, campaigns can look like winners while quietly draining margin. The problem isn’t the metric itself. It’s the blind spots that sit around it in a standard ad dashboard. Here are five worth naming.
ROAS reports estimated revenue
ROAS is attributed to the revenue divided by ad spend. There is no cost of goods inside that calculation, no shipping, no handling, no payment processing fee, no refund adjustment. And the revenue figure itself is only an estimate, platform-reported numbers rarely match the actual orders sitting in Shopify once attribution windows, cancellations, and refunds are reconciled.
That makes ROAS an estimated efficiency score, not a profit score. A campaign posting a 4x ROAS can still be unprofitable if the orders inside it carry low margins, or if the “revenue” the platform reported never fully clears in Shopify. When an estimated revenue number is the only thing being measured, real profit never gets a seat at the table.
Order-level costs stay off the dashboard
Even when merchants know costs exist, those costs rarely show up next to the ROAS number. Product cost sits in the catalog, shipping and handling land in the fulfillment platform, for example in shopify platform payment fees come out on the Shopify payout. The ad dashboard sees none of it.
The usual workaround is a spreadsheet after the fact. By the time the real profit picture lands, the campaigns in question have already been scaled or paused. Measuring real profit vs revenue from ad spend means pulling those costs into the same view as the campaign result, not stitching them together later.
Product margin mix is invisible
Two campaigns with the same ROAS can produce very different profit outcomes, and the dashboard will show them as equals. If Campaign A drives orders made up of high-margin products and Campaign B drives the same revenue from lower-margin products, the dollars left over per order are not the same.
It gets more complicated inside a single campaign. Product mix can shift week to week as creatives, audiences, and stock change. A campaign can drift toward lower-margin SKUs without the ROAS changing much. Ranking on ROAS alone treats every dollar of revenue as equal, which it isn’t.
New and repeat customers get blended into one number
Overall ROAS includes revenue from both new and existing customers, and those are very different economics. Acquiring a new customer usually costs more and converts at different rates than generating a repeat purchase from someone who already knows the brand.
The blind spot shows up in retargeting and brand campaigns. A campaign that mostly re-sells to existing buyers posts a strong ROAS because the audience is warm. The dashboard makes it look like a top acquisition engine, when it is harvesting demand you already had. A campaign’s job is usually either acquisition or retention, and the same ROAS can be good at one and poor at the other.
Attribution silently shapes the ROAS you see
The last blind spot is upstream of everything else. ROAS depends on which orders get attributed to a campaign, and attribution is a modeling choice, not a fact. Different models assign credit differently:
First Click credits the first touchpoint.
Last Click credits the final touchpoint before purchase.
Last Non-Direct Click credits the last non-direct touchpoint.
Linear Attribution spreads credit across every touchpoint.
Each model produces a different ROAS for the same campaign and the same spend. A top-of-funnel campaign can look weak under Last Click and strong under First Click. The underlying business is identical, the dashboard number isn’t.
How Bloom Helps Shopify Merchants See the Numbers Behind These Gaps
Each blind spot above has a metric that answers it. Gross Profit and Contribution Margin bring order-level costs into view. POAS (Profit on Ad Spend) measures profit per dollar of ad spend rather than revenue. NC Revenue, NC AOV, CAC, and Bloom NC ROAS separate new customer performance from repeat revenue. Attribution models decide which touchpoints get credit.
Bloom is built to put all of that in one place. It combines revenue, product costs, and fulfillment costs so merchants can see the profit sitting behind every marketing result, not just the revenue. For campaign comparisons, it brings POAS, Gross Profit, and Contribution Margin alongside ROAS, so a strong ROAS on low-margin products stops looking like a win it isn’t. It separates new customer performance from repeat revenue through NC Revenue, NC AOV, CAC, and Bloom NC ROAS. And Bloom’s Marketing Attribution shows the customer journey across touchpoints, so merchants can see which channels are actually contributing to attributed revenue under different attribution models.
The underlying question is simple: Is the campaign generating revenue, or generating profitable revenue? ROAS answers the first. POAS, combined with cost and attribution data, answers the second. A great ROAS is useful. Understanding the profit behind that ROAS is what helps merchants make better marketing and budget decisions.

Frequently asked questions
Why does my ROAS look good but my profit is low?
Because ROAS measures attributed revenue per dollar of ad spend, not profit. Product costs, shipping, handling, and payment fees reduce what you keep from each sale, so a strong ROAS can still leave very little profit.
What’s the difference between ROAS and POAS?
ROAS is revenue per dollar of ad spend. POAS is profit per dollar of ad spend. POAS accounts for product and order-related costs, so it reflects what the business actually keeps.
How do attribution models change my ROAS?
Models like First Click, Last Click, Last Non-Direct Click, and Linear Attribution assign credit to touchpoints differently. The same campaign can report a different ROAS depending on which model you use.
How do I measure profit from ad spend?
Combine revenue, product costs, and fulfillment costs for the orders a campaign generated, then compare that profit to the ad spend. Bloom does this by bringing POAS, Gross Profit, and Contribution Margin together with campaign and attribution data.
Discover More







