The Conversions API (CAPI) sends your orders to Meta from your server instead of the shopper's browser, so ad blockers, iPhone privacy settings and closed tabs can't lose them. On WooCommerce it takes about an afternoon. These are the steps in the order that avoids double counting.
1. Find your Pixel (dataset) id
In Meta Events Manager, open Data sources and pick the dataset your ads optimise for. Copy its id from Settings. Use the same id the Meta Pixel on your site uses: deduplication only works inside one id.
2. Generate an access token
In the same dataset's Settings, under Conversions API, press Generate access token. Copy it once and keep it private: it lets anyone send events to your dataset.
3. Install a server-side sender
- With Trakero: download the WooCommerce plugin from Developers, upload it in WordPress, paste the tracking endpoint and keys, then add Meta under Destinations with the pixel id and token.
- Without a platform: a server-side Google Tag Manager container (hosted by you or a provider) with a Meta CAPI tag, fed by your site's dataLayer.
4. One event id for both copies
The Pixel on the thank-you page and the server both report the purchase. Meta keeps one when the event name and the id match, so derive the id from the order: purchase_{order_id} in the browser (eventID) and on the server (event_id).
fbq('track', 'Purchase', { value: 2450, currency: 'BDT' }, { eventID: 'purchase_1042' });5. Send hashed customer data
Meta matches the order to the ad click with what you send. Hash email and phone with SHA-256 after normalising them: lowercase the email; write a Bangladeshi number as 8801712345678 (country code, no plus, no leading zero). Also send the shopper's IP address and user agent unhashed, and the _fbc and _fbp cookies when present.
6. Send a test event
Copy the test event code from Events Manager → Test events and send one Purchase with it. It shows up within a minute and never counts as a real conversion. Our free Meta event tester does this from your browser.
7. Decide when a COD order is a purchase
With cash on delivery, an order placed is not money received. Most Bangladeshi stores report the purchase when the order is confirmed (by call or SMS), which filters fake orders with a delay of hours. Whatever you choose, keep it fixed so Meta isn't learning from a moving target.
8. Check it after a day
- Events Manager → Overview: Purchase should show both Browser and Server, with deduplication on.
- Event Match Quality for Purchase should rise as hashed email, phone, fbc and fbp arrive.
- Compare a day of orders in WooCommerce with purchases in Events Manager: the gap should close, not double.