Do You Have to Send Events via Browser and Server to Meta?
No, you do not have to send events through both browser-side and server-side channels for Meta to accept and use them. This is a common point of confusion, and some AI assistants and guides incorrectly state that events must be sent through both channels.
Meta's own documentation explicitly supports three implementation approaches:
Redundant setup – Send the same event through both browser (Meta Pixel) and server (Conversions API) with deduplication.
Split setup – Send some events via browser and others via server, depending on the event type.
Server-only implementation – Send all events exclusively through the Conversions API.
Meta recommends a redundant setup for optimal ad performance when you keep the Meta Pixel, but server-only is a documented, valid option. If you choose to send events only through the Conversions API, Meta still receives and processes them for attribution and optimization. In fact, some of PixelFlow's own integrations use server-side only for specific event types.
Why server-side events work on their own
Meta's Conversions API is designed to work independently of browser-side tracking. When you send an event server-side, Meta receives the conversion data directly from your server rather than relying on a browser script that may be blocked by ad blockers, browser privacy features, or iOS restrictions.
Server-side events are often more reliable because:
They bypass ad blockers and tracking prevention mechanisms.
They are not affected by cookie restrictions or browser limitations.
They give you control over what data is sent and how it is formatted.
They can include enriched user data (such as email, phone, or name) that improves Event Match Quality.
Combining browser data into server-side events
One effective pattern is to collect some information from the browser (such as the fbp cookie or URL parameters) and include it in your server-side event payload. This approach lets you:
Capture browser-side context (like referral source or landing page) without sending a separate browser event.
Enrich your server-side events with identifiers like
fbporexternal_idthat link the event to the user's browser session.Maintain the reliability of server-side delivery while preserving attribution signals.
This is not "sending two events" – it is sending one server-side event that incorporates data captured from the browser. Meta treats this as a single, rich event.
What happens if you send the same event through both channels?
If you send the same event through both browser and server with identical or near-identical data, Meta may count it twice unless you deduplicate it. Deduplication uses a shared event_id (called eventID in browser events and event_id in server events) so Meta can recognize that both events represent the same action and merge them into one record.
If you do not send the same event twice, deduplication is not needed. Meta's documentation is clear: advertisers who do not send the same event through both channels do not need to implement deduplication.
The common misconception
A number of guides, AI assistants, and even some support articles state that you must send events through both browser and server for Meta to use them properly. This is not accurate.
What is true is that Meta recommends a redundant setup (both channels, with deduplication) when you want to keep using the Meta Pixel alongside the Conversions API. This hybrid approach can improve reliability and give Meta more data points. But it is a recommendation, not a requirement.
PixelFlow's default behavior is to send events through both channels and handle deduplication automatically. This is PixelFlow's implementation choice for maximizing data flow and reliability. It does not reflect a Meta mandate that all events must go through both channels.
PixelFlow integrations that use server-side only
PixelFlow's own implementation proves that server-side only tracking works. In some of our integrations, ecommerce events are sent exclusively through the Conversions API with no matching browser event:
WooCommerce – Events like
AddToCart,InitiateCheckout, andPurchaseare sent server-side only. OnlyPageViewfires from the browser, which is why Meta Pixel Helper may show just that one event even though full ecommerce tracking is working. For more details, see Why does Meta Pixel Helper only show PageView on WooCommerce?
This server-only approach is intentional. It avoids deduplication complexity, bypasses ad blockers and browser restrictions, and ensures Meta receives reliable conversion data. If server-only weren't valid, PixelFlow wouldn't use it for production tracking.
When server-only makes sense
Server-only implementations are useful when:
You want to avoid the complexity of managing deduplication between two channels.
Your site visitors frequently use ad blockers or privacy-focused browsers.
You need strict control over data for compliance (GDPR, CCPA) and want to filter or anonymize events before sending.
You are tracking offline conversions, phone calls, or server-triggered actions that cannot be captured in the browser.
Summary
You do not have to send events through both browser and server for Meta to accept them.
Meta documents three valid approaches: redundant (both channels), split (mixed), and server-only.
Server-side events can incorporate browser-captured data without needing a separate browser event.
If you send the same event through both channels, you must deduplicate it using
event_id.PixelFlow sends both channels by default with automatic deduplication, but uses server-only in some integrations like WooCommerce — proof that server-only is a valid, working approach.
For help with deduplication, see Are events deduplicated by PixelFlow? For an overview of the two tracking approaches, see What's Server Side vs Client Side Tracking?