A pet products brand was spending $62 to acquire a customer with a 90-day LTV of $48. At those numbers, every paid customer was a $14 loss. The founder had been optimising for volume — more orders, lower CPCs — without checking whether the unit economics worked. The fix wasn't lower CPMs. It was $12,000 in monthly spend cut from campaigns that were acquiring customers below their break-even, without the volume to compensate.
What's actually inside your CAC
Most Shopify brands calculate CAC as: total ad spend ÷ number of orders. That's a start, but it misses the costs that sit between the click and the actual acquisition.
A more accurate CAC includes:
- Ad spend (what you paid Meta and Google)
- Agency or management fees (pro-rated per order)
- Platform fees (Shopify transaction fee 0.5–2%, Shopify Payments 2.9% + $0.30)
- Fulfillment cost on that first order
- Refund/return rate applied as a cost per acquired customer
For the pet brand: $28 blended CPO from Meta, $4.80 management fee, $6.20 platform and payment fees, $9.40 fulfillment, $13.60 in returns (9.3% return rate × AOV). Real CAC: $62. Revenue per acquired customer in the first 90 days: $48.
The Meta dashboard showed 2.8 ROAS. The P&L showed a loss on every customer. The gap came from fulfillment and return costs that never appeared in the ad platform report.
The 3 places CAC leaks without showing up in Meta
Leak 1: High-spend campaigns with above-average return rates. Return rate varies by product and by traffic source. A campaign targeting broad audiences might drive strong CTR but attract buyers who return at 14% vs. the store average of 7%. The ROAS looks acceptable; the actual revenue retained after returns is not. Meta shows revenue at order value. It doesn't show revenue at post-return value.
Leak 2: Campaigns targeting low-LTV customer segments. Not all customers are equal. A brand selling consumables to first-time buyers at $38 AOV looks fine on CAC. If those buyers never repurchase, the lifetime math fails. Campaigns targeting price-sensitive audiences with heavy discount angles consistently acquire customers who don't come back — which means the only way to maintain revenue is continuous new acquisition at full CAC forever.
Leak 3: Budget split between campaigns with wildly different true CPOs. Account-level ROAS averaging hides campaigns running at 1.4 ROAS alongside campaigns at 4.1 ROAS. The blended number looks acceptable. The low-performer is quietly costing $40 per order that's barely profitable. It continues running because the account-level number doesn't expose it.
How the pet brand found and cut the waste
The audit took 22 minutes. Three filters run in Meta Ads Manager, last 90 days:
- Sorted by spend descending, checked Shopify return rate per campaign using UTM filtering. Two campaigns — targeting broad fashion-adjacent pet audiences — had 14.6% and 16.2% return rates vs. the store's 9.3% baseline. Combined spend: $5,800/month. Net revenue after returns: unprofitable.
- Compared 90-day LTV of customers acquired via each campaign (pulled from Shopify customer data by UTM source and tagged by first order date). The two broad-audience campaigns were acquiring customers with average 90-day LTV of $31. The niche-audience campaigns (pet health, breed-specific interests) were acquiring customers with 90-day LTV of $72.
- Identified $6,200 in spend (from the earlier meta account audit) on ad sets with zero purchases. Combined with the two high-return campaigns: $12,000/month redirected from losing spend to the three niche campaigns that were actually profitable.
Result: total ad spend unchanged. Orders dropped 11% in month 1 (expected — fewer customers, better ones). CAC: $62 → $39. 90-day LTV: $48 → $71. Profitable for the first time in 4 months.
The 20-minute CAC audit to run today
Pull these 4 numbers for your last 30 days:
- True CPO by campaign — ad spend ÷ orders for each campaign in Meta
- Return rate by campaign — filter Shopify orders by UTM campaign, calculate returns/orders per source
- 90-day LTV by acquisition campaign — compare customers acquired via each campaign, average 90-day revenue (requires UTM tagging from day one)
- Blended contribution margin — for each campaign: CPO + fulfillment + platform fees + returns. If that sum exceeds your average 90-day LTV, the campaign is losing money.
Any campaign where true cost of acquisition (including fulfillment, fees, and returns) exceeds 90-day LTV is a leak. Pause it. Reallocate to the campaigns where the math works.
The number you want is not the lowest CPO — it's the campaign with the widest gap between true CAC and 90-day LTV. That's where to put more budget.