The 3-minute version
- Each metric alone lies. ROAS ignores margin, AOV ignores customer economics, CAC ignores lifetime value.
- ROAS × contribution margin is the real signal. A 2:1 ROAS on a high-margin product can beat a 3:1 ROAS on a low-margin one.
- CAC vs LTV is the scaling gate. ROAS earns the campaign a thumbs-up; LTV decides whether you can pour more money in.
- Attribution shifts the numbers without shifting reality. iOS 14.5 dropped measured ROAS without changing real efficiency.
- Read them side by side. The spend decision falls out of the triangulation, not out of any single row.
It is Monday morning, campaign dashboard in one tab, finance spreadsheet in another. The dashboard says the Meta campaign hit a 3:1 ROAS, the green-light threshold the team agreed on last quarter. The spreadsheet says contribution per ad dollar is barely positive. AOV is up week-over-week, which everyone is treating as good news, but CAC against new customers has crept up too. So: scale the campaign, or not?
The metrics are not broken. The reading of them is. Each of these three numbers answers a different question, and the question an operator actually needs answered — should I spend more money here this week — is not any of them. It is the joint reading.
Why each metric lies when read alone
ROAS is a revenue ratio. It compares ad-attributed revenue to ad spend and tells you nothing about whether that revenue is profitable. A 4:1 ROAS on a product that costs 80% of its retail price to make and ship loses money on every order. A 1.5:1 ROAS on a product with 75% contribution margin makes money on every order. Same dashboard tile, opposite verdicts.
AOV is a basket-size average. It rises when customers buy more per order, which is good, but it does not tell you whether those customers come back, what they cost to acquire, or whether the basket-size move came from genuine demand or from a bundle promotion that compressed margin. AOV up, contribution down is a real and common pattern.
CAC is an acquisition cost — usually measured as paid spend divided by new customers in a period. Read alone, it cannot answer the only question that matters for a paid channel: is this customer worth more than they cost? A $60 CAC is a bargain for a brand whose customers contribute $400 over two years and a disaster for one whose customers spend $50 once and never return. Same number, opposite verdicts again.
The worked example: 3:1 ROAS vs 2:1 ROAS
Consider two SKUs in the same catalog. SKU A is a commodity-ish product running at 30% contribution margin after COGS, shipping, payment fees, and returns. The Meta campaign for it returns a 3:1 ROAS. For every dollar of ad spend, the campaign generates three dollars of revenue, and 30% of that revenue — $0.90 — is contribution. The campaign nets $0.90 of contribution per ad dollar before fixed costs.
SKU B is a proprietary product running at 70% contribution margin. Its campaign returns a 2:1 ROAS — apparently worse on the dashboard, the kind of number a media buyer might quietly turn down spend on. But two dollars of revenue at 70% contribution is $1.40 of contribution per ad dollar.
SKU B is about 56% more profitable per ad dollar than SKU A, despite having the lower ROAS. An operator reading the ROAS column alone — sorting descending, cutting the bottom — cuts the more profitable spend. The arithmetic is not subtle. It is just invisible if you are looking at one number.
(These margins are illustrative, chosen for the contrast. Real DTC products span the range; the point is that two SKUs in the same catalog can sit on opposite sides of the profitability story while the ROAS column says the opposite.)
CAC, LTV, and the scaling gate
A campaign can pass the ROAS-vs-margin test on a single-order basis and still be the wrong place to put more money. That is what LTV (Lifetime Value) is for. If a channel acquires customers at a $50 CAC and those customers go on to spend $150 of contribution over their lifetime with the brand, the channel can absorb meaningful additional spend even if a given week’s ROAS looks middling. If the same channel acquires customers at a $50 CAC and those customers contribute $40 total, no ROAS in the world saves it — the math runs the other way every additional dollar in.
The classic heuristic is a 3:1 LTV:CAC ratio: a channel is scalable when lifetime contribution is roughly three times the cost to acquire. That number originated in SaaS unit economics and travels imperfectly to DTC, where payback windows are shorter and the cost structure is different. Treat it as a starting point, not a law. The deeper move is having an LTV number you trust at all — most brands do not, which is why most scaling decisions get made on ROAS alone and reversed two quarters later.
AOV is a CAC lever in disguise
AOV moves at constant conversion rate quietly change the CAC arithmetic. Suppose conversion rate is flat and average basket size rises 20% — from $80 to $96 — because of a new free-shipping threshold and a complementary upsell on the cart page. Cost per acquired customer has not moved. But revenue per acquired customer has, which means the cost-per-revenue-dollar ratio improves, and the campaign’s apparent ROAS improves with it. The customer-acquisition economics have not gotten better in any deep sense; the basket has.
This matters when comparing two campaigns with different basket profiles, or when a campaign’s ROAS jumps and the team credits the creative. Sometimes the creative did it. Sometimes the merchandising team launched a bundle. The metric does not distinguish; the operator has to.
Attribution drift — the iOS 14.5 cautionary tale
In 2021, Apple’s App Tracking Transparency changes broke a meaningful share of the conversion signal that ad platforms used to credit themselves with sales. Measured ROAS dropped on Meta-attributed campaigns industry-wide, sometimes substantially. Google Ads dashboards shifted too, though less dramatically because of how the click-attributed signal moves through web rather than app. Underlying ad efficiency had not changed. The customers were still arriving; the ad platforms just could not see them as clearly.
This is what Attribution drift looks like in the wild. Operators who reacted to the apparent ROAS collapse by cutting spend on the worst-hit channels were, in many cases, cutting working campaigns based on a measurement artifact. The lesson is not that platform-reported ROAS is useless — it remains a useful directional signal — but that a sudden shift in measured performance, especially one that lines up with an attribution change at the platform or browser level, deserves to be checked against an out-of-platform number before the budget moves.
Read them together, decide once
The dashboards that produce better spend decisions look boring. They put ROAS, AOV, CAC, contribution margin, and a CAC:LTV ratio in the same view, at the same grain, for the same time window. They make the joint reading the default rather than something an operator has to assemble in their head from five tabs. The spend decision then falls out of the triangulation — this channel is profitable per order AND has room to scale AND the apparent shift last week was attribution, not performance — rather than out of any one row.
The companion to this is the framework we wrote about in the prior post on fast vs slow, volume vs efficiency: fast-moving metrics tell you what changed today, slow-moving efficiency metrics tell you whether the brand is actually getting healthier. Reading ROAS, AOV, and CAC together is the same instinct applied at the campaign level. The single-number reflex is comforting. The joint reading is what holds up two quarters later, when someone asks why you scaled what you scaled.
From the team
The joint reading is a five-tab assembly when ROAS lives in the ad platforms, AOV and contribution lie in Shopify and the finance sheet, and CAC has to be reconciled across both. A unified analytics tool like Ignyte IQ, where paid spend, basket math, and customer cohorts join at the source, turns the joint view into a default rather than a Monday-morning assembly.