Your ad spend is up month over month. The ad account looks healthy in every dashboard — CTR is fine, CPM is reasonable, CPC is in range. And yet ROAS is not moving, and revenue is not growing in proportion to what you are spending. You are staring at a $40K month that is making you less profitable than $15K used to.
Your agency keeps reporting good performance. The metrics they show are green. But the metrics that pay the bills are flat, and "spend more, test more, broaden the audience" has stopped working — if it ever did.
Here is what most operators miss: when ads are not converting, the problem is almost never the ad. It is upstream — in the landing page, the tracking, the audience match, the offer, or the site speed. Most paid agencies can only touch the ad account, so their answer to flat ROAS is always more spend. That does not fix a leak. It pours more money through it.
This post walks through the five upstream places ad conversion actually breaks. By the end you will know which one is leaking on your account, and what to do about it.
The metric your agency reports vs the metric that pays you
Most paid reporting leads with metrics that look healthy and tell you almost nothing about profit.
CTR tells you the ad is interesting. It does not tell you the click buys anything. CPM tells you the auction is cheap, not that the traffic converts. CPC tells you clicks are affordable, not profitable. "Engagement" tells you nothing about purchases at all. And ROAS in isolation lies if it is not adjusted for contribution margin — a 3x return on a thin-margin product, after COGS, shipping, and returns, can still lose money.
The numbers that actually decide whether paid is working are different. Contribution-margin ROAS, after the real cost of goods, shipping, and returns. Blended CAC against LTV, not the flattering in-platform CAC. Payback period — how long until a customer covers what you paid to acquire them. And incremental lift — whether the spend is creating sales you would not have made anyway.
If your report does not show those, you do not know whether the spend is working. You only know the ad mechanics look fine. And ad mechanics can look perfect while every dollar leaks out somewhere between the click and the checkout. That somewhere is one of the next five places.
Leak 1: The landing page isn't built for ad traffic
This is the most common upstream leak, and the easiest to miss because the page "works" for everyone else.
Your ad sends the visitor to a product page or homepage built for organic visitors. Organic visitors arrive warm — they searched, they read, they already have context. Ad visitors arrive cold, mid-scroll, interrupted, with about three seconds of attention and no reason yet to care.
How to spot it: click your top-spending ad on your phone and look at where it lands. Does the page repeat the promise the ad just made? If you could not tell which ad sent you there, the page is not built for that traffic.
Where it goes wrong:
- The ad sends to a generic product page that never echoes the ad's hook, so the visitor's expectation breaks on arrival.
- There is no above-the-fold value proposition matching what the ad promised.
- The page is content-heavy and slow to scan, written for someone who already trusts the brand.
- There is no first-time-visitor offer matching the ad's call to action.
The fix: build dedicated landing pages, or landing-page variants of your best product pages, for paid traffic. Echo the ad's hook in the hero. Put the offer above the fold. Match the creative to the page visually so the visit feels continuous, and make it fast on mobile. Sending cold paid traffic to your standard product page and hoping is the most expensive habit in DTC. Expect a 20 to 40 percent lift in ad-to-purchase conversion when this is done properly.
Leak 2: Tracking is broken in ways you can't see
Half of "underperforming" ad accounts are performing fine. The platform just cannot see the conversions, so it cannot optimize for them, and the report understates what is really happening.
iOS changes, ad-blockers, GA4 quirks, and missing server-side tracking all open a gap between what happens and what the ad account believes happened. The algorithm learns from the events it can see. Hide a third of your conversions and you are asking it to optimize blind.
How to spot it: compare the purchases your ad platform reports for last month against the orders Shopify actually recorded for the same period. If Meta says 100 and Shopify says 130, you have a 30 percent blind spot.
Where it goes wrong:
- Meta's Conversions API is not implemented, so Meta sees only pixel events — the ones iOS users block.
- GA4 conversion events fire on the wrong trigger, like add-to-cart instead of purchase.
- Duplicate pixels fire the same event twice, inflating reported numbers.
- Server-side tracking is missing, leaving 20 to 40 percent of conversions invisible.
- Attribution windows are too short for a considered purchase.
The fix: implement server-side tracking — Meta's Conversions API at minimum, server-side GTM ideally. Audit every conversion event so it fires once, on the right trigger, with enriched parameters passed back. Reconcile platform numbers against Shopify monthly. Making real conversions visible to the algorithm often produces a 15 to 30 percent apparent ROAS improvement before you touch a single piece of creative — because the algorithm can finally optimize toward what is actually selling.
Leak 3: The audience is wrong
The platforms' targeting tools have gotten worse, not better. Lookalikes degrade fast. Broad works for some brands and not others. Most operators are either targeting too narrowly and starving the algorithm, or too broadly and paying to reach people who will never buy.
How to spot it: open your prospecting campaign and check whether it excludes past purchasers and recent site visitors. If it does not, you are paying prospecting prices to reach people you already own.
Where it goes wrong:
- Lookalike audiences are built from an order list that is too small or too old to be useful.
- Interest targeting is really broad targeting wearing a costume.
- Retargeting audiences exist but are never excluded from prospecting, so you pay twice for the same visitor.
- Custom audiences have not been refreshed in over 90 days.
- Geographic targeting is wider than the places you actually fulfill well.
The fix: rebuild custom audiences at least quarterly. Seed lookalikes with your best data — high-LTV customers, repeat buyers, specific product affinities — not your whole order list. Exclude existing customers and recent visitors from prospecting. For most DTC brands under $5M, broad targeting with strong creative variation beats narrow targeting at scale — but only after the tracking leak is fixed, because the algorithm needs visible conversions to learn who to find. Expect a 10 to 25 percent improvement in prospecting efficiency.
Leak 4: The offer isn't an offer
"20% off your first order" worked in 2018. By 2026 your customer has seen it on every ad in their feed for six months straight. If your offer matches every other brand's, your ads are competing on creative alone — a race most brands lose.
How to spot it: look at your offer and ask whether a competitor could copy it in five minutes. If yes, it is not an offer, it is a discount everyone already runs.
Where it goes wrong:
- A generic percentage discount identical to every competitor's.
- No genuine urgency — and fake countdown timers backfire the moment customers notice.
- No bundle or first-purchase logic that raises AOV instead of just shaving margin.
- The offer is not echoed on the landing page, so the ad promises one thing and the page shows another.
- No social proof tied to the offer — "12,000 customers started with this bundle" lands harder than "20% off."
The fix: design offers that actually differentiate. Bundle logic that raises average order value. First-purchase incentives tied to education — a dosing guide, a starter kit, a consultation — rather than a flat cut. Genuine scarcity, like a limited batch or a seasonal run. Make the offer the creative, not the discount stapled to it. When the offer is genuinely different from what surrounds it in the feed, expect a 15 to 30 percent improvement in conversion rate on ad traffic.
Leak 5: Site speed is killing your ad ROI
The most underrated upstream leak. Ad traffic is impatient by nature — these visitors did not seek you out, they were interrupted into your store. Every 100 milliseconds over about two seconds costs you a measurable share of paid conversions.
How to spot it: run PageSpeed Insights on your top product pages and your homepage, on mobile. If Largest Contentful Paint is over 2.5 seconds, you are losing ad ROI on every campaign pointing at those pages.
Where it goes wrong:
- LCP over 2.5 seconds on mobile, which is Google's own threshold.
- A theme-plus-apps stack pushing 5 to 8 seconds on mobile.
- A hero image shipped as a huge PNG instead of a sized WebP.
- Third-party scripts — reviews, chat, popups, heatmaps — blocking the render.
- A cart drawer that takes a second or two to open, right at the moment of intent.
The fix, in order: optimize images (WebP, correct sizing, lazy loading), audit third-party scripts and remove or defer what you can, cut theme JavaScript bloat, and trim the app stack. If you are on Shopify Plus and the standard theme stack still cannot get under 2.5 seconds, a headless front end is worth costing out. Speed alone usually returns a 5 to 15 percent lift in ad-to-purchase conversion, more on mobile — which is where most of your paid traffic actually is.
The diagnostic you can run today
You do not need a tool for the first pass. Pull your top-spending campaign from the last 30 days and work through this.
- Click the actual ad on a real phone and time the load. Over three seconds points at Leak 5.
- On the landing page, check whether the headline echoes the ad's promise. If you would not connect the two without the ad, that is Leak 1.
- In your ad platform, compare reported purchases to Shopify's orders for the same period. A gap over 15 percent is Leak 2.
- Open your prospecting campaign's audience. Is it excluding past purchasers and recent visitors? If not, Leak 3.
- Look at your offer. Could a competitor copy it in five minutes? If yes, Leak 4.
- Run PageSpeed Insights on that landing page. LCP over 2.5 seconds confirms Leak 5.
Write down every place the answer was wrong. That list is your leak map — and it is the same place a real paid audit starts, before anyone touches the creative.
Fix it yourself, or bring in help
Plenty of this is fixable in-house, and you should fix it there when you can.
Do it yourself if you found one specific leak and it is clearly the problem, your team has the depth to fix tracking, landing pages, and speed on its own, and your monthly spend is under roughly $15K — below that, the math does not yet justify a senior team.
Bring in help if the diagnostic pointed at three or more leaks, you are spending $30K or more a month and ROAS has been flat for 60-plus days, or your current agency keeps optimizing the ad and reporting that the account is healthy while you are not growing. And bring in help if you want the upstream and the ad account audited together — most agencies only do one side, which is exactly why the plateau never breaks.
When the agency's answer to flat ROAS is always "spend more," the answer is almost always upstream. If your ads are not converting and the diagnostic above pointed at three or more leaks, the fix lives in the closed loop between the ad, the landing page, the tracking, and the store. We audit both sides — the ad account and the upstream funnel — because optimizing one without the other is why most paid agencies plateau. If that is useful, the next step is a paid account audit: a 15-minute fit call where we tell you honestly whether we can move your numbers, before you spend anything.
About the author
Manpreet Singh
Manpreet Singh is the founder of Proscube, an ecommerce growth studio. He leads the studio's Shopify and Shopify Plus engineering, headless builds, CRO, and its work on AI engine optimization, and writes its guidance on how to grow a DTC brand without wasting money. He works directly with founders — no account-manager layers between you and the people doing the work — and would rather tell a client not to build something than sell them work they don't need.
More about Manpreet