I had a client case that looked great: leads were coming in, ads were running, CPA looked steady.

Then we checked the CRM…

Wow. 40% of Meta leads were junk. Forms were submitted — but with fake contact info. Not a single deal closed.

Meta was bringing clicks, not buyers. Why? Tracking was built for show — not for real business outcomes.

Meta is smart, but blind. It only sees what you give it. Feed it garbage — and it’ll learn garbage, burning your budget.

Here’s why Meta tracking often fails:

• No Conversions API. Pixel sees only part of the picture. iOS users or those who don’t consent? Invisible.

• No deduplication. Meta can’t connect clicks to conversions. It assumes results didn’t happen.

• Broken/incomplete UTM tags. No way to match leads to creatives or campaigns = flying blind on your side.

• No cross-checking with GA4 and CRM. If you don’t validate data, you’re trusting a mirage.

How I fix it so Meta stops acting like a blind chef:

• Always use Conversions API. Hybrid setup: Pixel + server-side. No exceptions.

• Send both event_id and detailed user_data. Same event_id from client and server = Meta knows it’s the same action.

• Send qualified events. Not just “lead,” but “verified lead.” Pass it as a custom event via API.

• Auto-tag all links. Use {{ad.name}}, {{campaign.name}}, {{placement}} in UTMs — full visibility in GA4/BigQuery.

• Weekly reconciliations

Compare Ads Manager, GA4, and CRM. If numbers don’t match — dig.

Meta thrives on clean, timely data. If it’s missing, messy, or wrong — you’ll get poor learning, bad leads, and high costs.

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