Case studyEcommerce60 days
A 3.2x ROAS account that was losing money on its bestsellers
We rebuilt the bidder around profit, not revenue. Same sales, 36% more margin.
- Gross profit
- +36%
- POAS
- 1.0 → 1.4
- ROAS
- 3.2x → 3.1x
- Revenue
- Flat
Revenue is a vanity metric at the SKU level
ROAS optimises revenue. Revenue is not profit. When your catalogue has a mix of margins, a flat ROAS target quietly pushes budget toward whatever converts most easily, and the things that convert most easily are often your discounted, low-margin bestsellers. The dashboard goes up and to the right. The contribution margin sits at break-even. Everyone's confused about why a winning account feels broke.
Here's the math that exposed it. A flat 3.2x ROAS means your ad cost is the sale price divided by 3.2. Run that against two real SKUs from this account and the truth is brutal.
Same ROAS, opposite outcomes
| SKU | Price | Margin | ROAS | Profit per sale after ad cost |
|---|---|---|---|---|
| Discounted bundle | $80 | 12% | 3.2x | −$15 |
| Hero product | $140 | 58% | 3.2x | +$37 |
The $80 sale costs $25 in ads and carries $9.60 of margin, so it loses $15. The $140 sale costs $44 and carries $81 of margin, so it makes $37. Same ROAS. One funds the business, one drains it.
Feeding profit into the bidder
If you send Google revenue, it buys revenue. Send it profit and it buys profit.
The rebuild
01
Pulled true margin per SKU
Got real landed cost and margin per product from the brand's finance and store data. No estimates. Bidding to profit only works if the profit number is right.
02
Tagged margin tiers with custom labels
Every SKU labelled into a margin tier in a supplemental feed, so campaigns could be split and targeted off real economics.
03
Sent profit as the conversion value
Switched the conversion value from revenue to a margin-adjusted profit value, so the bidder optimises toward money kept rather than money moved.
04
Locked down tracking with enhanced + server-side conversions
Bidding to profit against bad data just optimises against bad data faster. Enhanced conversions plus a server-side setup made the values accurate and complete under consent mode.
05
Set targets off break-even per tier
Each margin tier got a tROAS derived from its own break-even plus a buffer, instead of one flat number pretending every product was the same.
What you send is what you get
| What you send Google | What it optimises for |
|---|---|
| Revenue (the default) | More sales, at any margin |
| Profit (margin-adjusted value) | More money kept |
Sixty-day results
Before and after
| Metric | Before | After (day 60) |
|---|---|---|
| Revenue | $240K / month | ~$236K / month |
| Ad spend | $75K | $75K |
| ROAS | 3.2x | 3.1x |
| Gross profit | $76.8K | $104K |
| POAS | 1.0 | 1.4 |
Revenue flat, spend flat, and the business kept an extra $27K a month.
“Our dashboards said we were winning all year. The first month we bid to profit, revenue barely moved and we kept twenty-seven thousand more dollars. That was the real account the whole time.”
Questions we get asked about this
What's the difference between ROAS and POAS?
ROAS is revenue over ad spend. POAS is profit over ad spend. ROAS treats an $80 sale at 12% margin the same as an $80 sale at 60% margin, even though one funds the business and one drains it. POAS only counts the money you keep. If your margins vary across the catalogue, ROAS will quietly push budget toward your worst products because they often convert easiest.
How do I send profit to Google instead of revenue?
Two routes. The clean one is to send a profit-adjusted conversion value from your store or server, so Google bids on margin directly. The simpler one is to tag SKUs into margin tiers with custom labels and run separate tROAS targets per tier set off each tier's break-even. Most accounts start with tiers and graduate to true profit values once tracking is solid.
What's my break-even ROAS?
One divided by your gross margin. A 50% margin product breaks even at 2.0x, a 25% margin product at 4.0x, a 12% margin product at 8.3x. This is why a flat ROAS target across a mixed catalogue is a mistake: the same 3.2x is wildly profitable on one product and deeply unprofitable on another.
Do I need server-side tracking for this?
You need accurate values, and enhanced conversions plus a server-side setup is the reliable way to get them, especially post-iOS and with consent mode in play. If your conversion values are wrong or undercounted, bidding to profit just optimises against bad data faster.
Frameworks behind this case study
Where these numbers come from
Illustrative example. The campaign structure and the margin math shown are the exact approach we deploy. The figures are representative of what it produces for accounts in this spend band over a 60-day window, not an export from one client's account.
More breakdowns on the daily newsletterWant this structure on your account?
Free 30-minute audit. No deck. No pitch.
We screenshare your Google Ads, GA4 and Shopify, run the same audit playbook this account came out of, and leave you the document whether you become a client or not.
Book the call