A client came to me with a familiar story: CPA doubled, leads dropped, ROAS tanked. “Meta used to work — now it feels like we’re just burning cash.”

We checked the setup — Pixel worked, events fired, creatives refreshed. But deeper down:

• no Conversions API,

• no event_id,

• optimization goal triggered once a week.

Meta wasn’t broken — it was blind.

Meta is smart, but only if you feed it data. Without signals, it guesses — and wastes your budget.

Here’s what typically breaks campaign learning:

• No server-side tracking (CAPI)

• No visibility = no learning

• Optimizing for rare or junk events. Like unqualified leads — Meta learns from noise

• Missing event_id, email, phone. No match = no attribution = bad decisions

• No creative testing/rotation. Same banners = no learning = stagnation

• Short attribution windows. If your sales cycle is 10 days but Meta tracks 7, conversions are lost

• Too few conversion events. <50 per week? Learning remains unstable

To stop the budget drain, here’s the checklist I follow:

• Hybrid tracking: Pixel + CAPI. Non-negotiable — don’t launch without it

• Pass event_id + customer data. Meta needs identity to optimize

• Optimize for mid-funnel goals. “Price request” > “purchase” — more signals, faster learning

• Track revenue-tied actions. Clicks are noise — use custom events via API if needed

• Weekly CRM reconciliation. Don’t trust Meta blindly — verify everything

Meta doesn’t try to waste money — it just reflects the inputs you give it.

Feed garbage → get garbage decisions → pay for it.

What to do:

• set up strong tracking;

• optimize for business-relevant events;

• cross-check Meta data with CRM and GA4.

That’s how campaigns stop being guesswork — and start scaling with clarity.

If you work with GA4 to BigQuery exports, be sure to check out my SQL cheat sheet.