Meta Conversions API: A Practical Implementation Guide for WordPress
Server-side tracking for WordPress sites: how to implement CAPI, deduplicate events, and verify attribution accuracy.
The Meta pixel alone is no longer enough. Since iOS 14, browser-based tracking misses anywhere from 20 to 40 percent of conversion events depending on your audience. That is not a rounding error. That is a meaningful portion of your data disappearing before it reaches Ads Manager, and your campaign optimisation suffers for it.
The Conversions API (CAPI) is Meta's answer to this problem. It sends event data directly from your server to Meta, bypassing the browser entirely. The pixel still fires in the browser for users who allow it. CAPI fires from your server for everyone. The result is a more complete picture of what is actually happening on your site.
What CAPI Actually Does
CAPI does not replace the pixel. It runs alongside it. When a user completes a purchase, two signals are sent to Meta: one from the browser pixel, one from your server via CAPI. Meta reconciles these using a matching process and deduplicates them so the same event is not counted twice.
The server-side signal is more reliable because it does not depend on browser permissions, ad blockers, or cookie restrictions. It also carries better matching data. You can pass hashed email addresses, phone numbers, names, and location data, which improves Meta's ability to match the event to an actual Meta user account.
Better matching means better optimisation. Your campaign's cost per result improves when Meta has cleaner signal to work with. This is not hypothetical. It is a measurable difference in attribution quality, visible in your Event Match Quality score inside Events Manager.
WordPress Implementation Options
For WordPress sites, there are two practical paths: PixelYourSite Pro or a manual server-side implementation via the Meta Conversions API gateway or custom PHP.
PixelYourSite Pro is the faster option for most sites. It handles pixel firing and CAPI simultaneously, manages event deduplication, and supports WooCommerce out of the box. Configuration takes a few hours rather than days. You need the Pro licence and the CAPI add-on, but for most small-to-medium WordPress sites this is the right call.
Manual implementation via the Meta Business SDK gives you more control. It is worth the investment for custom-built sites where PixelYourSite's event mapping does not line up cleanly with your conversion points. This path requires PHP development capability and a solid understanding of the Events Manager payload structure.
For An Nam Quan, we used PixelYourSite Pro as the base CAPI layer, then extended it with custom JavaScript for events the plugin did not cover natively. The plugin handled standard WooCommerce events. The custom layer handled the hospitality-specific conversion points.
Custom Events and the fireAndGo Pattern
Standard e-commerce events like Purchase and AddToCart map cleanly in PixelYourSite. Hospitality and service businesses often have conversion points that need custom handling: a click on a phone number, a tap on a directions link, a booking form open.
For An Nam Quan, we implemented custom JS events for FindLocation, Contact, and InitiateCheckout. FindLocation fires when a user clicks through to Google Maps. Contact fires on phone number clicks. InitiateCheckout fires when a user opens the reservation form.
The challenge with external link clicks is timing. If the pixel fires and the browser navigates away immediately, the event request can be dropped before it is sent. We handle this with what we call the fireAndGo pattern: intercept the click, fire the pixel event, wait 400 milliseconds, then allow the navigation to proceed.
element.addEventListener('click', function(e) {
e.preventDefault();
fbq('track', 'FindLocation');
setTimeout(function() {
window.location.href = destination;
}, 400);
});
That 400ms window is enough for the pixel request to be dispatched without creating a noticeable delay for the user. This pattern applies to any outbound link where you need to capture the event reliably before the page unloads.
Deduplication: Getting the Event ID Right
Deduplication is where CAPI implementations most commonly break. If you do not set it up correctly, you end up with doubled events in Events Manager, which inflates reported conversions and confuses campaign optimisation.
The mechanism is straightforward. Every event fired by the browser pixel and every matching event sent via CAPI must share the same event_id. Meta uses this ID to identify and remove duplicates. Without it, both the browser event and the server event are counted separately.
In PixelYourSite, this is handled automatically when CAPI is enabled. The plugin generates a unique event ID for each page load and passes it to both the pixel and the server-side call.
If you are implementing manually, generate a UUID for each event on the server, pass it to the browser via a data attribute or inline script, fire the pixel with that ID, and include the same ID in your CAPI payload:
fbq('track', 'Lead', {}, { eventID: 'your-generated-uuid' });
And in the CAPI payload sent from your server:
{
"event_name": "Lead",
"event_id": "your-generated-uuid"
}
Without matching IDs, Meta cannot deduplicate. You will double-count events and your reported numbers will be meaningless.
Which Events to Prioritise
Not every event carries equal weight for campaign optimisation. Prioritise the ones closest to your actual business outcome.
For a restaurant or hospitality business, the priority order is: Contact (phone or email enquiry), FindLocation (strong intent signal), InitiateCheckout (booking form open), then softer signals like PageView and ViewContent.
For e-commerce or lead-gen: Purchase first, then InitiateCheckout, then Lead, then AddToCart. The reason to prioritise is volume.
Meta needs at least 50 optimisation events per week per ad set to exit the learning phase and optimise properly. If you spread your setup across too many low-volume events, no single event accumulates enough signal. Start with the event closest to revenue. Build volume there before adding others.
Verifying Your Setup in Events Manager
Once CAPI is live, verify it using the Test Events tool inside Meta Events Manager. This tool shows real-time event data as you trigger actions on your site.
Fire each event manually: open the booking form, click the phone number, click the directions link. Check that each event appears with both a browser and server source. If you see only browser, CAPI is not firing. If you see only server, the pixel has an issue.
Look at the deduplication status. Events Manager will show a "Deduplicated" label in the event breakdown when it successfully collapses a browser and server event into one. If you see your event count doubling relative to actual activity, deduplication is not working, and you need to check that event IDs are matching correctly.
Reading Event Match Quality Scores
The Event Match Quality score in Events Manager is your key indicator of how well Meta can match events to user accounts. It runs from 0 to 10. A score of 6 or above is considered good. Scores below 6 suggest you are not passing enough customer information fields in your CAPI payload.
Improving match quality requires passing more user data. For a contact form submission, you have the submitted email and often a name. Hash these using SHA-256 before sending. PixelYourSite handles this automatically for WooCommerce orders. For custom events, you need to pass the data manually in the CAPI server call.
The fields that carry the most matching weight are email (hashed), phone number (hashed and in E.164 format), first name, last name, and city. You do not need all of them. More is better, but email alone is enough to meaningfully improve your score over pixel-only.
What Good Looks Like
A well-implemented CAPI setup shows the following in Events Manager: every key event has both browser and server sources, deduplication is active, event match quality is 6 or above, and total event volume is within 5 to 10 percent of what you would expect from actual site activity.
It will not be perfect. Some events will still be missed. iOS users who have opted out of tracking will not have device-level matching. But the gap between pixel-only and CAPI-plus-pixel is significant, and the improvement in campaign performance reflects it.
For An Nam Quan, adding CAPI alongside the custom event setup gave the campaigns cleaner signal to work with and more consistent cost-per-result performance across optimisation periods. Server-side tracking is no longer optional if you are running serious spend on Meta.

