
Start with contribution margin, not revenue. Take each product's price, subtract cost of goods, shipping, transaction fees, and returns to get gross profit per order. Then subtract the ad spend that produced that order. If profit per order exceeds your blended customer acquisition cost, the ads are genuinely profitable.
- ROAS measures revenue per ad dollar, not profit — a 4x ROAS on a product with a 20% margin still loses money on every sale.
- Real ad profitability starts with contribution margin: price minus COGS, shipping, payment processing fees, and returns — before any ad spend is subtracted.
- Break-even ROAS equals 1 divided by your contribution margin: a 30% margin needs roughly a 3.3x ROAS just to break even.
- Shopify charges $39–$399/mo plus transaction fees, and WooCommerce hosting runs $30–$200/mo — fixed costs most stores forget to fold into per-order math.
- Returns, discounts, and platform fees quietly erode 10–30% of headline revenue, which is why dashboard ROAS almost always overstates true profit.
Why ROAS Alone Never Tells You If You're Profitable
ROAS — return on ad spend — measures revenue per ad dollar, and revenue is not profit. That single gap is why so many store owners feel busy and broke at the same time.
Say your ad platform reports a 4x ROAS: every $1 of ad spend returned $4 in sales. That sounds healthy. But if the products you sold carry a 25% contribution margin, that $4 of revenue only contains $1 of gross profit — exactly what you spent on the ad. You broke even and scaled your workload for nothing. Push for volume at that ratio and you can grow revenue every month while your bank balance shrinks.
The platforms aren't lying; they're just reporting the only number they can see — the sale. They don't know your cost of goods, your shipping, your payment processing fee, your return rate, or the discount code the customer stacked at checkout. All of that sits between revenue and profit, and all of it comes out of your pocket, not Google's or Meta's dashboard.
There's also an attribution layer. The platform claims credit for sales it merely influenced, and counts each conversion in its own walled garden, so summed ROAS across Google and Meta can exceed your actual order count. Treat reported ROAS as a directional signal for which campaigns are working relative to each other — not as a verdict on whether your store makes money. The verdict only comes from margin-based math, which the next section walks through step by step.
Step One: Calculate Contribution Margin Per Order
Before you can judge an ad, you need to know what one order is actually worth to you. That number is contribution margin, and almost every store overestimates it.
Start with the average order's selling price after discounts — use the price customers actually pay, not your list price, because promo codes and free-shipping thresholds are real. From that, subtract every variable cost tied to fulfilling the order: cost of goods sold (what you paid for the product), inbound and outbound shipping, packaging, and the payment processing fee (typically a small percentage of the sale plus a flat per-transaction charge). Then subtract a returns allowance — if 12% of orders come back, every order effectively carries about 12% of a refund-and-restock cost, so spread that loss across all orders.
What's left is your contribution margin in dollars, and as a percentage of the sale price. A $100 order with $45 COGS, $9 shipping, $3 processing, and a returns allowance of $7 leaves $36 — a 36% margin. That $36, not the $100, is the money available to pay for advertising and still turn a profit.
Two cautions. First, platform costs matter: Shopify runs $39–$399/mo plus transaction fees and WooCommerce hosting $30–$200/mo, and those fixed costs eat into profit even though they aren't per-order. Spread them across your monthly order volume so they don't hide. Second, do this per product or product group, not store-wide — a hero product at 50% margin and a loss-leader at 8% tell very different stories, and a single blended average can mask the SKUs quietly draining you.
Step Two: Find Your Break-Even ROAS and True CAC
Once you know your contribution margin, your break-even ROAS falls out of one piece of arithmetic: divide 1 by your margin. A 36% margin means a break-even ROAS of roughly 2.8x (1 ÷ 0.36). Below that you lose money on each sale; above it you make money.
This single number reframes every campaign. A store with a 50% margin breaks even at a 2x ROAS, so a 3x is genuinely profitable. A store with a 20% margin needs a 5x ROAS just to break even — and a 4x that looked great on the dashboard is actually a loss. Print your break-even ROAS on the wall, because it converts the platform's vanity metric into a clear go/no-go line.
The other half of the picture is customer acquisition cost (CAC) — total ad spend divided by new customers acquired. Calculate it blended across all channels, not per platform, so overlapping attribution doesn't let two platforms both claim the same buyer. If your contribution margin per order comfortably exceeds your blended CAC, the ads pay for themselves on the first purchase. If it doesn't, you're either buying customers at a loss or relying on repeat purchases to recover the gap.
That repeat-purchase question is where lifetime value enters. A store where the average customer buys three times a year can rationally pay a CAC above first-order margin, because customer lifetime value covers it. A one-and-done store cannot. Knowing your repeat rate tells you which game you're playing — and stops you from either over-spending on customers who never return or under-investing in acquiring ones who would.
Step Three: Connect the Real Numbers So You Can See Profit
The math above only works if real costs flow into your reporting — otherwise you're calculating profit on guessed inputs. Most stores fail here, not at the formula.
The cleanest setup feeds cost of goods into your platform so profit, not just revenue, shows up in reporting. Shopify lets you store COGS per variant and surfaces gross-profit reports; WooCommerce can do the same with a cost-of-goods plugin. With COGS in the system, your analytics can report profit per order and per channel instead of leaving you to reverse-engineer it in a spreadsheet at month-end. Pair that with accurate conversion tracking so each sale ties back to the campaign that produced it, and you can finally see profit by source.
Then close the loop with the ad platforms. Importing order value — ideally profit-adjusted value rather than raw revenue — back into Google Ads lets the algorithm optimize toward profitable orders, not just any order. If you sell a $40 item at 60% margin and a $200 item at 15% margin, raw-revenue bidding chases the $200 item even though the $40 one makes you more money. Value-based bidding fixes that, but only if you feed it the right value.
Finally, reconcile against reality monthly. Compare the profit your dashboards claim to what actually landed in the bank after refunds, chargebacks, and platform fees cleared. The gap between reported and banked profit is your measurement error — and shrinking it is the whole job. If you'd rather not assemble this stack yourself, this is exactly the kind of full-funnel, first-click-to-final-sale tracking SearchPod builds for e-commerce clients, with the account and data owned by you.
Related questions
There's no universal number — a "good" ROAS depends entirely on your contribution margin. A store with a 50% margin is profitable at a 2x ROAS, while a 20%-margin store loses money at 4x. Calculate your break-even ROAS (1 ÷ margin) first, then aim comfortably above it. Chase a target ROAS that clears your real costs, not an industry benchmark.
Profit. Revenue tells you how much money moved; profit tells you how much you kept. Two campaigns with identical revenue can have wildly different profitability if they sell different products at different margins. Whenever possible, feed profit-adjusted values into your tracking and bidding so the platforms optimize toward orders that actually make you money, not just large orders.
Heavily, and they're usually invisible in ad dashboards. Returns, refunds, chargebacks, and discount codes can erode 10–30% of headline revenue, which means dashboard ROAS almost always overstates true profit. Build a returns allowance and your real average discount into your contribution-margin math so the profit you calculate matches the money that survives to your bank account.
Per product, or at least per product group. A store-wide average hides the SKUs quietly losing money behind the ones that win. A hero product at 50% margin and a loss-leader at 8% need different ad strategies and different break-even ROAS targets. Blending them into one number can lead you to scale spend on items that lose money on every sale.
Yes, if your data supports it. If customers reliably buy more than once, you can justify a higher acquisition cost than first-order margin alone allows, because repeat purchases recover the gap. But base lifetime value on your actual repeat-purchase rate, not optimism — one-and-done stores must be profitable on the first order, and assuming repeat revenue you don't have is how stores overspend into losses.
Want a second opinion on your situation?
Get a free, no-obligation proposal. We’ll look at your site and your market and tell you honestly what we’d do — and what we wouldn’t.
Get Free Proposal →