, , ,

Diagnosing a Data Mystery: Was It Broken Analytics or a Broken Campaign?

When a winery client approached me about an underperforming paid advertising campaign, they weren’t sure whether to blame the creative, the conversion funnel — or broken tracking.

min read

Meta-conversion-api-analytics

When a winery client approached me about an underperforming paid advertising campaign, they weren’t sure whether to blame the creative, the conversion funnel — or broken tracking. Their goal was simple: drive tasting reservations through a Facebook campaign, but conversions didn’t match expectations.

What followed was a full-stack investigation across Google Tag Manager (GTM), Meta Events Manager, cookie consent systems, and even Meta’s server-side tracking infrastructure. Here’s what we uncovered — and what we fixed.

The Challenge

The client’s Facebook Ads were driving plenty of top- and mid-funnel activity, but purchases (reservations) weren’t showing up in Meta’s reporting. Were conversions truly missing — or just invisible due to a tracking issue?


Step 1: Auditing GTM + Consent

I started in Google Tag Manager (GTM) to review the tag ecosystem and found an important clue:

The /events/ page was excluded from cookie consent

In the CookieYes CMP tag, there was an exception configured that prevented consent prompts (and thus all marketing/analytics tags) from loading on the /events/ page — the very page being used in the campaign.

Why that matters:

When users land first on /events/, GTM doesn’t fire any tags that rely on ad_storage or analytics_storage — including GA4 and Meta Pixel. This effectively blinds your funnel analytics and Meta event tracking from the very start.

Fix: We removed the exclusion and confirmed consent banners now show correctly on /events/.

CookieYes default consent settings

Step 2: Reviewing Facebook Pixel & CAPI Setup

The client had both Meta Pixel (browser) and Meta Conversions API (server-side via Stape) set up. We checked for common issues:

Verified:

  • Facebook Pixel ID matched between GTM and Events Manager
  • Consent mode was functioning
  • Server-side event_id matched browser-side event_id to ensure deduplication

We also cleaned up legacy tags:

  • ❌ Removed old GA3 and Stape GTM Server-Side container
  • ✅ Retained only Meta’s CAPIG (Conversions API Gateway) method

Step 3: Fixing Custom Event Formatting

Problem:

Meta expects flattened parameters for custom events like Schedule or reservation_purchase. For example:

jsonCopyEdit"content_ids": ["event123"],
"content_name": "Winemaker Lunch"

Instead of nested eCommerce-style arrays.

Fix:

We created a Custom JavaScript variable in GTM to reformat the content_ids and content_name fields.

We also passed email, name, and phone (when available) into Meta Pixel and CAPI to improve match rates.


Step 4: Creating a Custom Event in Meta

The original FB – C7 Reservations tag was renamed to emit a custom event called reservation_purchase (lowercase for clarity). To surface this inside Meta:

  1. Turned off “Use enhanced event matching” toggle in Meta Test Events
  2. Triggered a real reservation on the live site
  3. Waited ~10 minutes
  4. Acknowledged the new event inside Events Manager

Finally, we built a Meta Custom Conversion based on this new custom event — giving Meta something to optimize for in future campaigns.


Root Cause Revealed

With tracking now working and data flowing cleanly, all signs point to the original campaign strategy as the weak link:

  • The campaign targeted too broadly
  • It may not have optimized for conversion events (e.g. reservation_purchase)
  • Some reservations had $0 values (from wine club members), which Meta ignores for conversion attribution

Bonus Improvements

  • Cleaned up all legacy GTM tags: GA3, old CAPI, deprecated variables
  • Confirmed CookieYes default behavior: initial state is “denied” until user consents, exactly as expected
  • Set up the groundwork for future winery clients to benefit from what we’ve learned here

Lessons Learned

Tracking is only as good as the weakest link — whether that’s cookie consent gating, tag configuration, or misaligned server-side setups. In this case, the campaign underperformance wasn’t a tech failure, but the tech wasn’t set up to rule it out confidently until we investigated.

With a clean, deduplicated, and privacy-compliant setup in place, the winery can now launch new campaigns with full confidence in the data.


💬 Need help auditing your own eCommerce tracking setup?

If you suspect your Meta, GA4, or server-side tagging isn’t telling the full story — reach out. We’ll dive in, debug, and fix it.

admiral ai Analytics blue-otter chatgtp extended team GA4 GTM lessons Meta Pixel productivity sqa stem creative the app wars wineries workflow backup xemoto