I Set Up Facebook CAPI But Events Are Not Showing: The WooCommerce Troubleshooting Guide

December 24, 2025
by Cherry Rose

You followed the setup guide. The plugin says it’s connected. But your Facebook Events Manager shows nothing—or worse, half your purchases are missing. You’re not alone. The Facebook for WooCommerce plugin has fundamental architectural problems that cause events to disappear, especially purchase events that actually matter for ad optimization.

The problem isn’t user error—it’s timing. Facebook’s Conversions API relies on the “thank you” page loading in your customer’s browser. When payment gateways redirect users through external apps (like PayPal, Stripe, or bank payment portals), that timing breaks. The customer never hits the thank you page the way the plugin expects, and your purchase event vanishes into thin air.

Why Your Facebook CAPI Setup Looks Fine But Isn’t Working

Here’s the frustrating reality: your AddToCart and ViewContent events are probably firing perfectly. Open Meta Events Manager, and you’ll see them streaming in. But compare your WooCommerce order count to your CAPI purchase events, and you’ll notice the gap—sometimes 30-40% of purchases simply aren’t being tracked.

31.5% of internet users worldwide use ad blocking tools at least sometimes (GWI, 2024). That’s already a significant chunk of your traffic invisible to browser-side tracking. Server-side tracking via CAPI was supposed to fix this. But when the implementation itself is broken, you’re not recovering that lost data—you’re adding more loss on top.

The Facebook for WooCommerce plugin fires purchase events on the woocommerce_thankyou hook. This seems logical—it’s the thank you page, right? But there’s a critical flaw: this hook depends on the customer’s browser session remaining intact through the entire checkout flow.

The Three Architectural Problems Breaking Your CAPI Events

Problem 1: Payment Gateway Redirects Kill Sessions

When a customer pays via PayPal, Klarna, or most European bank payment methods, they leave your site entirely. They go to a payment provider’s app or website, complete their transaction, and then get redirected back. During this redirect, their browser session often gets lost or reset.

The Facebook for WooCommerce plugin stores the _fbc click identifier in a cookie. When the customer returns from the payment gateway in a fresh session (common on iOS), that cookie is gone. No click ID means Facebook can’t attribute the purchase to your ad—even if the event fires.

A WooCommerce GitHub issue documented this exact behavior: “The CAPI purchase event should not depend on a user session and should not be fired on the order-received page.” The plugin’s architecture fundamentally misunderstands how modern payment flows work.

Problem 2: Caching Plugins Interfere With Event IDs

Event deduplication requires matching event IDs between browser and server events. When your caching plugin serves a cached version of the page, the event ID that was generated when the page was first cached gets reused.

Result: duplicate event errors in Facebook Events Manager, or worse—your server events get dropped because Facebook thinks they’re duplicates of browser events that never actually fired.

Common caching plugins that cause this issue include LiteSpeed Cache, SG Optimizer, WP Rocket, and Asset CleanUp. The fix—disabling JavaScript grouping or excluding tracking scripts from optimization—often conflicts with site performance goals.

Problem 3: iOS and Safari Break Browser-to-Server Handoffs

Safari’s Intelligent Tracking Prevention (ITP) limits first-party cookies to 7 days. The Facebook click ID stored in _fbc expires. If your customer clicks an ad but doesn’t purchase for 8 days, their conversion won’t be attributed correctly.

iOS makes this worse. When users click Facebook ads in the app and get redirected to Safari, the handoff often breaks. Add in consent mode requirements that are already killing your analytics, and you’re losing data at multiple points in the journey.

What Actually Happens When a Purchase Event Fails

Let’s trace through a real scenario. Your customer sees your Facebook ad, clicks through, adds a product to cart, and proceeds to checkout. At this point, AddToCart and InitiateCheckout events fire successfully—both browser and server events log correctly in Events Manager.

The customer selects PayPal. They’re redirected to PayPal’s site (or app on mobile). They complete payment. PayPal redirects them back to your thank you page.

But here’s what went wrong: the PayPal app opened a new browser context. The session cookies from the original browser are gone. The woocommerce_thankyou hook fires, but the plugin has no access to the Facebook click ID. The purchase event either doesn’t fire at all, or fires without the attribution data Facebook needs.

Your ad shows the click. Your WooCommerce shows the order. But Facebook shows nothing.

How to Diagnose Missing Purchase Events

Before implementing fixes, confirm what’s actually broken. Open Facebook Events Manager and navigate to the Test Events tab. Place a test order using the same payment method your customers use. Watch for:

  • Browser events without server events: CAPI isn’t firing at all
  • Server events without browser events: Your pixel is blocked (ad blockers or ITP)
  • Both events, but no deduplication: Event IDs don’t match—you’re double-counting
  • Purchase event missing entirely: The thank you page timing failed

Check your WooCommerce server logs. Look for CAPI calls around the time of test orders. If you see AddToCart logged but no Purchase, the timing hypothesis is confirmed.

Now compare event counts. Pull your WooCommerce order count for a specific day. Pull your CAPI purchase events for the same day. If you see 8 orders but only 5 purchase events, that’s a 37% data loss—enough to wreck your Facebook campaign optimization.

The Deduplication Problem Nobody Warns You About

Facebook requires both browser and server events to send the same event_id for proper deduplication. When both fire correctly, Facebook keeps the browser event and drops the server event to avoid double-counting.

Missing or mismatched event IDs cause one of two outcomes: inflated conversion counts (if both events are counted separately) or dropped conversions (if Facebook can’t match them).

The Facebook for WooCommerce plugin generates event IDs, but several conditions break the matching:

  • Server cache not cleared after enabling CAPI
  • Custom tracking code added via Google Tag Manager (without matching IDs)
  • Facebook’s automatic event detection enabled in pixel settings
  • Multiple tracking plugins firing duplicate events

According to tracking specialists, missing Event ID parameters cause deduplication errors 80% of the time. If you’re seeing “Event ID deduplication warning” in your diagnostics, this is your culprit.

Why Server-Side Tracking Needs to Be Truly Server-Side

Here’s the core issue: the Facebook for WooCommerce plugin calls itself “server-side,” but it still depends on browser behavior. The event fires from your server, but only after the thank you page loads in the customer’s browser. That’s a hybrid approach that inherits the worst problems of both methods.

True server-side tracking captures purchase events when the order is created in your database—not when a page loads. It stores attribution data (like the Facebook click ID) in your order record, so payment gateway redirects can’t lose it. It fires the CAPI event based on the order status changing to “completed,” not based on a WooCommerce hook that depends on browser sessions.

42.7% of internet users now use ad blocking tools (Statista, 2024). Browser-side anything is increasingly unreliable. If you’re not capturing conversion data at the server level—truly at the server level—you’re building on sand.

What True Server-Side Tracking Looks Like

A properly architected server-side solution handles purchases like this:

1. Customer clicks your Facebook ad. The fbclid parameter in the URL gets captured and stored server-side, associated with the customer’s session or email.

2. Customer adds items to cart, begins checkout. These events can fire browser-side or server-side—they’re not the critical ones.

3. Customer completes payment via any gateway. The payment provider sends a webhook to your server confirming the transaction.

4. Your server creates the WooCommerce order with the stored fbclid. The purchase event fires to Facebook CAPI directly from your server, with no browser dependency.

This architecture eliminates the timing problems. Server-side tracking becomes genuinely worth it for WooCommerce stores when it actually works this way.

The Transmute Engine Approach

This is exactly why the Transmute Engine™ was built differently. It captures the Facebook click ID at the WordPress level and stores it with the order data—not in browser cookies that can disappear. When the order completes (regardless of which payment gateway was used), the purchase event fires directly to Facebook’s API.

No thank you page dependency. No session cookie requirements. No deduplication failures from mismatched event IDs. The event fires based on what actually happened in your store, not based on whether a browser loaded a page correctly.

Key Takeaways

  • The Facebook for WooCommerce plugin depends on browser sessions that payment gateways often break. External payment flows (PayPal, Stripe, bank portals) kill the session cookies the plugin needs.
  • 30-40% of purchase events can go missing due to redirect timing issues alone. This is before counting ad blockers, Safari ITP, or caching conflicts.
  • Event deduplication failures cause 80% of CAPI diagnostic errors. Mismatched or missing event IDs mean Facebook either double-counts or drops your conversions.
  • True server-side tracking fires events based on database changes, not page loads. If your “server-side” solution still needs the thank you page to load, it’s not solving the core problem.
  • Store Facebook click IDs in order data, not cookies. Payment gateway redirects can’t lose what’s stored in your database.

Frequently Asked Questions

Why is my Facebook Conversions API not reporting purchase events even though I followed the setup guide?

The Facebook for WooCommerce plugin fires purchase events on the thank you page using the woocommerce_thankyou hook. When payment gateways redirect customers to external sites (PayPal, bank portals), the browser session gets interrupted or reset. The customer returns without the session cookies containing the Facebook click ID, so the event either doesn’t fire or fires without attribution data. This is an architectural limitation of the plugin, not a configuration error on your part.

Do caching plugins break Facebook CAPI tracking?

Yes. Caching plugins can serve cached event IDs, causing deduplication failures. When the same event ID is sent for different purchases, Facebook either double-counts conversions or drops them entirely. Plugins like LiteSpeed Cache, SG Optimizer, and WP Rocket can interfere with tracking scripts. The recommended fix is to disable JavaScript grouping and exclude Facebook tracking scripts from optimization, though this may impact site performance.

Why do iOS purchases from Facebook ads not show up in Events Manager?

iOS compounds multiple tracking issues. Safari’s ITP limits first-party cookies to 7 days, so Facebook click IDs expire quickly. When users click ads in the Facebook app and get redirected to Safari, the handoff often fails, losing the click identifier entirely. Additionally, external payment apps (PayPal, Apple Pay) open new browser contexts that don’t share cookies with the original session. These combined factors can cause 30-40% or more of iOS purchases to go untracked.

What causes Facebook CAPI event deduplication errors?

Deduplication errors occur when the browser pixel event and server CAPI event have mismatched event IDs. Facebook uses the event_id parameter to recognize that both events represent the same action. Missing or different event IDs cause either double-counting (inflated conversions) or dropped events. Common causes include server cache not cleared after enabling CAPI, custom GTM tracking without matching IDs, Facebook’s automatic event detection conflicting with plugin events, and multiple tracking plugins firing duplicate events.

What makes server-side tracking truly server-side?

True server-side tracking fires events based on database changes, not browser page loads. It stores attribution data (like the Facebook click ID) in your order record when the customer first arrives, not in browser cookies. When a payment webhook confirms the transaction, the purchase event fires directly from your server to Facebook’s API—no thank you page dependency, no session cookies required. This architecture eliminates timing issues from payment gateway redirects.

Stop losing purchase data to broken tracking architecture. See how Transmute Engine handles Facebook CAPI the right way.

Share this post
Related posts