Diagnosing high spend with zero purchases
What Causes High Spend and Zero Purchases
Admaxxer is a DTC analytics platform with built-in Meta + Google ad ops. When your ad account shows $3,200 spent today with zero reported purchases, you have a measurement problem, not necessarily an ads problem. The short answer: walk the purchase event from checkout → pixel → CAPI → platform, and the break is almost always at one of nine predictable points.
TL;DR
- Pixel not firing on
/thank-youis the #1 cause — check Meta Pixel Helper live - CAPI misconfiguration means server events never reach Meta's API
- Wrong event name (Purchase vs purchase vs CompletedCheckout) bricks attribution
- Shipping zone or payment method blocking checkout is an ops problem dressed as a measurement problem
- Audience mis-targeting (wrong country, lookalike age skew) produces traffic that doesn't convert
The nine most common causes
The diagnostic universe for "spend fires, purchase doesn't" is almost always one of these:
- Pixel not firing on the thank-you page. App theme updates can silently remove the pixel snippet
- CAPI stopped working (access token revoked, webhook paused, rate-limited)
- Event name mismatch (
Purchasevspurchasevscomplete-order— Meta treats these as different events) - Content Security Policy (CSP) blocks the pixel domain after a security update
- Shopify Checkout Extensibility rollout broke the legacy checkout.liquid pixel injection
- Klaviyo firing Purchase but Shopify not firing CAPI (or vice versa) — Meta sees 50% of events
- Shipping zone or payment method blocking checkout — clicks and ATCs fine, checkout fails silently
- Audience mis-targeting — wrong country, wrong age band, wrong language
- Ads approved but landing page returning 500 — Meta doesn't block impressions when the destination is broken
Most accounts with this problem have cause #1, #3, or #5. Use the diagnostic steps below to walk through them in order.
Diagnostic steps
Step 1: Run Meta Pixel Helper on your own thank-you page
Open Chrome with the Meta Pixel Helper extension, complete a real test order (use a 100% discount code), and watch for the Purchase event on the order confirmation page. If nothing fires, your pixel is broken or missing from the thank-you template. Fix before anything else. In Admaxxer, open Connections → Meta → Pixel health which runs this check every 6 hours automatically.
Step 2: Verify CAPI is receiving events
Go to Meta Events Manager → Data Sources → your pixel → Overview. Look at the last 7 days of server events. If server events are zero but browser events are firing, CAPI is disconnected. If both are zero, the pixel itself is broken upstream.
Step 3: Check the event name exactly
Meta treats Purchase, purchase, and CompletedCheckout as distinct events. The ads are optimised for Purchase (capital P). If your CAPI sends purchase (lowercase), the events arrive but don't map to your conversion objective. Fix in your server code or Shopify app config.
Step 4: Inspect the checkout flow for silent failure
Use Shopify Admin → Orders → Abandoned checkouts. If ATC is firing (visible in Meta as AddToCart) but no Abandoned Checkout records exist in Shopify, the shopper never reached checkout. Could be a JavaScript error, a product variant out of stock, or a shipping zone rejection.
Step 5: Check audience targeting
Open Meta Ads Manager → Ad Set → Audience. Verify:
- Country/region matches where you ship
- Age band matches your actual buyer demographic (a supplement brand targeting 18–65 will waste spend on 18–24 who don't convert)
- Language (English-only ads shown to Spanish speakers will get clicks, not purchases)
Step 6: Look at landing page return code
Use a synthetic monitor or the Admaxxer pixel health check which tests that the landing page returns 200 and that the pixel loads. If the landing page is 5xx or 4xx for even 10% of hits, your conversion rate plummets while spend is unaffected.
Step 7: Check if ads are showing in the right placement
Advantage+ Placements can run your conversion ads in Stories, Reels, Audience Network — placements that can have 5× lower conversion rates than Feed. Pin to Feed + Instagram Feed for high-CPA campaigns until you have data to expand.
Step 8: Review shipping & checkout costs
If you added a $25 shipping fee last week and forgot to update ad copy promising free shipping, your ATC-to-Purchase rate cratered without any "break" that appears in analytics.
Step 9: Check account-level issues
Stripe payment disputes can pause your payment method. Shopify Payments holds can pause new orders. Neither shows up in Meta — only in Shopify admin. The Admaxxer connection health panel surfaces Stripe and Shopify status so you catch these fast.
Klaviyo vs Shopify source of truth
A common trap: Klaviyo's Shopify integration fires Purchase events for email-attributed orders via pixel, and Shopify's native Meta integration also fires Purchase events via CAPI. If these don't share event_id, Meta double-counts on some orders and misses others depending on firing order and ad-blocker presence. Solution: disable Klaviyo's Meta pixel integration, rely on Shopify → CAPI only, and attribute email via Klaviyo's own Shopify connection. See Platform vs pixel conversions for the full architecture.
Common mistakes
Three errors that cost hours before teams find them:
- Assuming Meta's "no purchase" number is real. Sometimes the purchase is happening — it's just being attributed to a different ad set because of the 7-day window. Check Meta's account-level total before declaring zero.
- Adding CAPI without disabling browser pixel. If you roll out CAPI and forget to keep
event_idsynced, you go from under-reporting to double-reporting and still think "zero purchases" because one ad set looks broken. - Trusting the "Events Received" count as proof. Events Received ≠ Events Matched. A pixel can fire 1000 times but match 0 conversions if the event_name is wrong or the user_data hashing is off.
For ongoing monitoring, the Admaxxer Claude agent pings you via the query_metrics tool whenever spend-to-purchase ratio drifts more than 3× baseline.
FAQs
What if the pixel fires but CAPI doesn't? That's fine for basic attribution but costs you 15–30% of iOS conversions. CAPI is how you recover post-ATT purchases. Every DTC account should have both.
How fast should Meta show purchases after they happen? Within 15 minutes in the Events Manager; within 1–3 hours in Ads Manager reports. If 24 hours pass with no purchases showing, something is broken.
Does this apply to Google Ads too? Yes — the analog is Google Enhanced Conversions (server-side) plus the gtag conversion event. Same diagnostic path. See the Google Ads service docs.
Can the Claude agent diagnose this for me? Yes — ask the agent "why is my Meta account showing zero purchases today?" and it will pull CAPI health, pixel fire rate, and recent event names in a single tool call.
Frequently Asked Questions
What if the pixel fires but CAPI doesn't?
That's fine for basic attribution but costs you 15–30% of iOS conversions. CAPI is how you recover post-ATT purchases. Every DTC account should have both.
How fast should Meta show purchases after they happen?
Within 15 minutes in the Events Manager; within 1–3 hours in Ads Manager reports. If 24 hours pass with no purchases showing, something is broken.
Does this apply to Google Ads too?
Yes — the analog is Google Enhanced Conversions (server-side) plus the gtag conversion event. Same diagnostic path.
Can the Claude agent diagnose this for me?
Yes — ask the agent why is my Meta account showing zero purchases today? and it will pull CAPI health, pixel fire rate, and recent event names in a single tool call.
What's the most common single cause?
Pixel missing from the thank-you page after a Shopify theme update. Check it first.
Put This Knowledge Into Action
Bring Meta and Google ads into one self-hosted workspace.
Get Started Free